Удаляем одинаковые строки

  • 6
  • Недоступна
В этой задаче тебе нужно: 1. Считать 6строк и заполнить ими массив strings. 2. Удалить повторяющиеся строки из массива strings, заменив их на null (null должны быть не строками "null"). Примеры. 1. Массив после чтения строк: {"Hello", "Hello", "World", "Java", "Tasks", "World"} 2. Массив после уд
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (193)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Kseniya #2884493
Уровень 6, Санкт-Петербург, Russian Federation
21 января, 15:06
Пожалуйста объясните зачем мы прибавляем j = i+1? не могу понять как словами объяснить решение задачи? что мы делаем двумя вложенными циклами?
Dmytryi Shubchynskyi
Уровень 9, Мариуполь, Украина
вчера, 21:27
В первом цикле мы берем строку strings[i] во втором цикле мы нашу текущую строку сравниваем с со всеми строками в массиве j = i + 1 необходимо для того чтобы сравнить текущую строку начиная со следующей за ней, иначе программа сравнит нашу строку с ней же и найдет совпадение там где его нет
Kseniya #2884493
Уровень 6, Санкт-Петербург, Russian Federation
около 10 часов назад
Спасибо!
Олег Мартынов
Уровень 5, Czech Republic
20 января, 17:07
решил задачу через for each, без дополнительных массивов
Олег Хальков
Уровень 7, Kyiv, Ukraine
16 января, 18:18
Повозился с задачкой 😅 оказался нюанс в том, что повторяющихся слов может быть нечетное количество(3,5,7,..) (валидатор это пассивно проверяет), а я мог сравнивать только парные повторения... Было бы легче, если бы добавили ремарку (подсказку) в условия, что повторяющихся слов может быть 3 и больше☝ а так спасибо за задачку 😄
Pavel
Уровень 7, Russian Federation
15 января, 10:19
/* Комментарий удален */
Yura
Уровень 1, Санкт-Петербург, Russian Federation
14 января, 14:05
Используйте два вложенных цикла. Первый по всему массиву, вложенный от текущего элемента + 1(i + 1) до конца массива. Сперва в каждом цикле сравнивайте элементы с null, дабы не вылететь, потом сравнивайте сами элементы - в первом цикле приравняйте strVar = strings[i], во втором str.equals(strings[j]) - если true то заменяем оба элемента в массиве. Можно чуть по другому - при сравнении если true не приравнивать strings[i] = null а ставить признак что это значение надо обнулить, и в конце верхнего цикла если признак равно true то обнуляем strings[i] = null. Тогда можно не использовать дополнительную переменную strVar = strings[i] и сравнивать strings[i].equals(strings[j])
Ринат Сираев
Уровень 4, Russian Federation
14 января, 13:16
🤢 не очень задача, много времени потребовалось( совсем не medium Я ее решил в idea, результат был правильный, но проверку не прошла. Решение было такое: 1. Скопировал текущий массив strings в новый strings1 2. Объявил переменную a = 0 3. Создал цикл for i-й по массиву strings 4. Создал цикл for j-й по массиву strings1 5. В for j-й сравнивал первое значение массива strings со всеми значениями массива strings1 и если находил true, то переменную a увеличил на единицу 6. В for i-й смотрел на переменную а. Если она была >= 0, то присваивал элементу i из массива strings null 7. В нем же, в for i-й потом a обнулял.
String[] strings1 = Arrays.copyOf(strings,strings.length);
int a = 0;
for (int i = 0; i < strings.length; i++) {
    for (int j = 0; j <strings1.length ; j++) {
        if (strings[i] == strings1[j])
            a++;
    }
    if (a>=2) {
        strings[i] = null;
    }
    a = 0;
не забыть импортировать Arrays
import java.util.Arrays;
Lepert Java Developer
20 января, 21:15
Вышло красиво)
Arkadiy1981
Уровень 8, Krasnodar, Россия
11 января, 07:37
Я решил другим способом. Получилось не рационально, зато сразу понятно. Валидатор пропустил. 1. Создал дополнительный массив, равный введенному: String[] tmp = {strings[0], strings[1], strings[2],strings[3],strings[4],strings[5]}; 2. Сравнивал поочередно элементы и пошагово менял массив strings[]: if (tmp[0].equals(tmp[1]) || tmp[0].equals(tmp[2]) || tmp[0].equals(tmp[3]) || tmp[0].equals(tmp[4]) || tmp[0].equals(tmp[5])) { strings[0] = null; } if (tmp[1].equals(tmp[0]) || tmp[1].equals(tmp[2]) || tmp[1].equals(tmp[3]) || tmp[1].equals(tmp[4]) || tmp[1].equals(tmp[5])) { strings[1] = null; и так далее до strings[5].
Юлия Мищенко
Уровень 8, Israel
8 января, 17:51
Я начала курс JavaRush реально с нуля. дошла до задачи с заменой одинаковых значений на null. Прочитала ваши комментарии и решила, пройтись по всем вопросам на этом ресурсе : обсуждение, помощь. и таким образом разобралась с алгоритмом. Понятно, что после всего этого я написала код. Меня смущает, что я это сделала со всеми вашими подсказками. Это критично? А что дальше,? я так же буду у вас подсказки спрашивать? и помощь просить?
Георгий Бурмистров
Уровень 6, Russian Federation
14 января, 05:17
Не переживайте, все в порядке, если с задачами с подсказками справляетесь, значит понимаете чужой код. Задача и правда сложная, зато интересная )
Anonymous #2954129
Уровень 2, Sumy, Ukraine
6 января, 14:23
Почему у меня выводится на экран, где показывает твой результат когда запускаешь, null, null, null, "Java", "Tasks", null, но при этом пишет, что второе требование не выполнено?
Евгений Кунчулия
Уровень 6, Санкт-Петербург, Russian Federation
4 января, 19:57
Пришлось знатно поднапрячься при решении, мне почему-то и в голову не пришло использовать переменную и оператор break, как в решении, я все возился с правильностью выполнения условия, в общем потратил уйму времени, но решил с первой попытки, условия выполняются, если кому то пригодится описываю свое решения по шагам: 1. Создал массив типа String на 6 элементов; 2. Создал цикл "for", заполнил массив; 3. Создал массив типа "boolean" на 6 элементов; 4. Создал внешний цикл "for" i от 0, i меньше длины массива; 4.1 Создал внутренний цикл "for" j от 0, j меньше длины массива; (необходим для сравнения элемента i в массиве с каждым элементом массива); 4.2 Создал условие, сравниваем элемент i массива "String" игнорируя регистр, с элементом [(strings.length-1) - j] массива "String"; <ИИ> strings[i] != strings[(strings.length - 1) - j] - (необходимо, чтобы сравниваемый элемент не сравнивался сам с собой, а то всем элементам присвоится null); 4.3 Если условие выполняется присваиваем значение "true" элементам [i] и [(strings.length - 1) - j] массива типа "boolean"; 5. Создал внешний цикл "for" i от 0, i меньше длины массива; 5.1 Создал условие, сравниваем элемента i массива типа "boolean" со значением "true"; 5.2 Если условие выполняется присваиваем значение "null" элементу i массива типа "String"; 6. Выводим все в консоль