Суть задачи состоит в том чтобы убрать из массива строк соседние элементы указывающие в противоположных направлениях (South-North, East-West), и это исключение должно повторяться пока не останется таких пар. Проблема в том что программа при вводных данных ["NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH", "WEST"], должна вывести ["WEST"], но в последнем шаге после проверки if что-то происходит и к уже готовому массиву добавляется 2 пустых значения в начале и вывод становится ["","","WEST"]. Хотя в отладчике до последнего момента все как надо. Почему так происходит?
public class Test{
public static void main(String[] args) {
Task task = new Task();
System.out.println(Arrays.toString(task.dirReduc(new String[]{"NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH", "WEST"})));
}
}
class Task {
public static String[] dirReduc(String[] arr) {
char c,b;
int count = 0;
/*Цикл проверяет на наличие двух "противоположных" соседей и
меняет строки на пустые в случае такого совпадения.*/
for(int i = 0; i<arr.length-1;i++){
c = arr[i].charAt(0);
b = arr[i+1].charAt(0);
if((c=='S'&&b=='N')||(c=='N'&&b=='S')) {arr[i] = ""; arr[i+1] = ""; i = i+2; count++;}
else if((c=='W'&&b=='E')||(c=='E'&&b=='W')) {arr[i] = ""; arr[i+1] = ""; i = i+2; count++;}
}
/*Создается List в который происходит копирование всех не пустых строк и из него
копируется в новый массив который либо возвращается как ответ либо происходит рекурсивный вызов самого метода.*/
List<String> list = new ArrayList<>();
for(String y: arr) {if(y.length()>1) list.add(y);}
String[] arr2 = list.toArray(new String[0]);
//Если произошло изменение и длина больше 1 то повторить.
if(count>0&&arr2.length>1){dirReduc(arr2);}
return arr2;
}
if (count > 0 && arr2.length > 1) {return dirReduc(arr2);}
Нужно добавить return
И i = i+2;, for тоже инкрементирует, в итоге +3 получается
if(count>0&&arr2.length>1){dirReduc(arr2);}
Не мешало бы использовать значение, возвращаемое dirReduc:
if (count > 0 && arr2.length > 1)
{
arr2 = dirReduc(arr2);
}
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости