Добрый день ! Посмотрела решение сразу говорю и не могу понять ничего.Если кто-то может объясните поэтапно что происходит ,а то я мало что смогла понять
public static void main(String[] args) {
1.Создаем объект Сканнер
2.Создаем объект-массив stings на 6 строк
3.Цикл от 0 до 5
4.Читаем строку и сохраняем в ячейку
5.объект массив на сколько то строк
6.currentString=чтению строк
...дальше я ничего не поняла
что это значит дальше ?
for (int j = i + 1; j < strings.length; j++) {
if (currentString == null) {
break;
}
if (currentString.equals(strings[j])) {
strings[j] = null;
strings[i] = null;
}
}
}
for (int i = 0; i < strings.length; i++) {
System.out.print(strings[i] + ", ");
}
}
}
Анастасия
20 уровень
У кого есть возможность объясните пожалуйста .
Решен
Комментарии (4)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Victor Zav
22 сентября 2021, 05:45
Логика похожа на поиск минимального элемента в массиве.
Сначала создается объект массив, затем в ячейки массива заносятся данные.
Для наглядности можно массив сразу инициализировать : String[] strings = {"Hello", "Hello", "World", "Java", "Tasks", "World"};// это позволит добавлять произвольные дубли, чтобы посмотреть как работает код при четном и нечетном количестве дублей.
После того как массив создан и "набит " данными мы создаем переменную типа String куда "скидываем " содержимое первой ячейки// : String currentString = strings[i];
Если такую переменную не создать, то будет удаляться только четное количество
дублей // а при нечетном количестве, один дубль будет оставаться в массиве.
Внешний цикл i это витки, внутренний j, это "пробежка" по всем элементам массива.
Т е при i=0, strings[0]="Hello"
Дальше мы это"Hello" гоним по внутреннему циклу j , сравнивая по очереди со всеми элементами массива.
Начинаем сравнение естественно со следующей ячейки j=i+1// иначе какой смысл сравнивать содержимое одной и той же ячейки с целью найти дубль... 100% дубль будет найден.
Если находим дубль, мы его удаляем, те присваиваем null:
strings[j] = null;
strings[i] = null;
После того как пробежали по внутреннему циклу и обнулили все дубли "Hello", переходим на следующий виток внешнего цикла, и если currentString == null, то прерываем отработку внутреннего цикла:
if (currentString == null) {
break;
}
и переходим к следующему витку внешнего цикла.
NB! Важный момент: для сравнения мы используем "==" те if (currentString == null)... а для присвоения "=" те strings[j] = null; strings[i] = null;
Очень полезно посмотреть как отрабатывает код в режиме дебага.
точку останова// break point можно поставить в начале метода main() // сразу после public static void main(String[] args), затем в режиме отладки начать построчное выполнение кода нажимая F8.
+1
Нейросеть
21 сентября 2021, 04:51решение
Дальше идем циклом по всем словам в массиве начиная с i + 1, то есть со следующего слова/ячейки массива после currentString.
Затем проверяем эту ячейку на пустоту. Если пустая, значит выходим из цикла.
Далее сравниваем текущую ячейку и следующюю. Если слова/значения ячеек равны , то удаляем их в обоих ячейках.
Прибавляем индекс j и проделываем все тоже самое уже с ячейкой j +1 или если так удобней i + 2 и так до конца массива, выявляя и удаляя дублирующиеся значения.
+5
Анастасия
21 сентября 2021, 12:19
Благодарю)
0
Hidden #213 Урoвень 13 (Forever&Ever)
21 сентября 2021, 17:08
И вы решили эту задачу сами?! (только честно)
Как до этого вообще можно было додуматься? (На данном этапе обучения)
+1