Написал решение, которое удовлетворяет условие, кроме случая, если есть одинаковые пустые строки. Не могу понять почему при присвоении текущего элемента массива буферной строковой переменной валидатор пропускает решение, а если сравнивать напрямую через array[i].equals(array[j]) - нет.
Scanner scan = new Scanner(System.in);
strings = new String[6];
for (int i = 0; i < 6; i++) {
strings[i] = scan.nextLine();
}
for (int i = 0; i < strings.length; i++) {
String currItem = strings[i];
for (int j = strings.length - 1; j > i; j--) {
if(currItem == null)
break;
if (currItem.equals(strings[j])) {
strings[j] = null;
strings[i] = null;
}
}
}
Другими словами для чего нужно вводить переменную currItem в этом примере? Почему нельзя сделать вот так:
Scanner scan = new Scanner(System.in);
strings = new String[6];
for (int i = 0; i < 6; i++) {
strings[i] = scan.nextLine();
}
for (int i = 0; i < strings.length; i++) {
for (int j = strings.length - 1; j > i; j--) {
if(strings[i] == null)
break;
if (strings[i].equals(strings[j])) {
strings[j] = null;
strings[i] = null;
}
}
}
Андрей Столяров
14 уровень
Почему валидатор ругается если не создать буферную переменную для хранения текущего элемента массива
Обсуждается
Комментарии (8)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
leExpert
15 мая, 17:07полезный
Если эта та задача о которой я думаю а это полюбому та задача.
То буферная переменная нужна чтобы цикл помнил что нужно удалять
Без нее у тебя будет 3 совпадения
AAA
AAA
GGG
AAA
GGG
HHH
Он взял AAA сравнил с ААА и сделал их NULL и пошел дальше а дальше у тебя еще один AAA который уже не с чем не совпадает потому что старые ААА уже удалены и он оставляет третье совпадение а валидатору надо чтобы метод удалял все совпадения.
+1
Андрей Столяров
16 мая, 07:34
да, понял, спасибо!
0
Ilya Klimchev Java Developer в spimex
15 мая, 07:18
Скорее всего, потому что кэшируется набор значений массива перед перебором. Т.е. когда интерпретатор доходит к примеру до 3-го элемента массива, то он видит то значение, которое было в нём на момент начала перебора, но, если непосредственно запросить это значение и попытаться присвоить куда-то ещё, то значение будет извлекаться из адреса ячейки, а не из кэша. Иного логичного объяснения нет. Думаю, что это баг/фича конкретной JRE
0
ГоффMaster
15 мая, 11:15
Нет
0
ГоффMaster
15 мая, 06:37
Очень интересно, но без кода - непонятно.
Приложи задачу или код.
0
Андрей Столяров
15 мая, 06:39
приложил
0
ГоффMaster
15 мая, 11:18полезный
Если одинаковых строк 3 то ты таким образом обнулишь лишь первые две. Третья не обнулится. Поэтому нам нужна вспомогательная переменная, с которой можно было бы сравнить 3-ю строку, когда первые две уже обнулены.
+2
Андрей Столяров
15 мая, 12:18
Спасибо!
0