Вопрос: как изменить код, чтобы он корректно работал. Основная проблема в инициализации массива.
Задача: Данные два массива строк a1 и a2 возвращают отсортированный массив r в лексикографическом порядке строк a1, которые являются подстроками строк a2.
Пример 1:
a1 = ["arp", "live", "strong"]
a2 = ["lively", "alive", "harp", "sharp", "armstrong"]
returns ["arp", "live", "strong"]
Пример 2:
a1 = ["tarp", "mice", "bull"]
a2 = ["lively", "alive", "harp", "sharp", "armstrong"]
returns []
Я понимаю, что код неправильный, а точнее в условии и присваивании. Потому что до этого не инициализировал, но можете подсказать как его отредактировать, чтобы было корректно.
Код:
public static String[] inArray(String[] array1, String[] array2) {
for (int i = 0; i < array1.length; i++) {
for(int c = 0; c < array2.length; c++){
boolean got = array2[c].contains(array1[i]);
if (got == true && array3[i] != array1[i]) {
String[] array3 = new String[] {array1[i]};
System.out.println(array3[i]);
}
}
}
return array3;
}
В результирующем массиве не будет больше элементов, чем в первом массиве. Поэтому его можно сделать изначально равным ему, а потом, при необходимости, уменьшить
public static String[] inArray(String[] array1, String[] array2) {
String[] array3 = new String[array1.length];
int cnt = 0;
for (int i = 0; i < array1.length; i++) {
for (int c = 0; c < array2.length; c++) {
if (array2[c].contains(array1[i]) {
array3[cnt++] = array1[i];
break; // Один раз вхождение нашли, дальше искать нет смысла
}
}
}
// если записали меньше элементов, чем размер массива
if (cnt < array3.length) {
// то создаем массив меньшего размера
String[] tmp = new String[cnt];
// и копируем в него элементы
System.arrayCopy(array3, 0, tmp, 0, cnt);
array3 = tmp;
}
// не забываем отсортировать массив
Arrays.sort(array3);
return array3;
}
Чтобы избежать приседаний с уменьшением массива, можно сразу использовать List<String>
, а потом дернуть .toArray()
Логика, в принципе, правильная. Только нужно создать array3 (лучше как ArrayList, т.к. точная длина неизвестна) до циклов и в случае совпадения (got == true
, а array3[i] != array1[i]
выкинуть, это вообще непонятно что такое) добавлять в array3 нужный элемент. Если нужно без повторов, то в нужном месте вставить break.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Создал многомерный массив (3x5), теперь надо вывести в консольКак можно это сделать?
Начал изучать javafx для создания GUIДо этого учил swing В swing можно создать такую таблицу:
Мне нужно сохранить файл в форматеtsv чтобы у него была кодировка в utf-8, насколько это реально сделать? Делало в том что у меня есть строка в которой...