Вот задача Есть поле из клеток по средине которого находится робот. Робот умеет выполнять 4 команды: двигаться на 1 клетку в сторону: R (right), L (left), U (up), and D (down). Задана строка из движений робота например "UUDLDR". Написать метод который вернет true если робот вернется в ту же клетку с которой начал.
вот я пытался это сделать но всегда выдает false, подскажите как сделать задачу? Мое решение:
public class robot {
public static void main(String[] args) {
int arr[][] = new int[3][3];
int nullength = 2;
int nulweight = 2;
int nextlenght = 0;
int nextweight = 0;
Scanner s = new Scanner(System.in);
System.out.println("Клетки 3х3, движения вводить так 'U D L R', а иначе
работать не будет.");
String move = s.nextLine();
move.split(" ");
System.out.println(moveRobot(nextlenght,nulweight,nullength,nextweight,
move));
}
public static boolean moveRobot(int nullenght, int nulweight, int
nextlenght, int nextweight, String move) {
if (move.split(" ").equals("U")) {
nextweight = nextweight++1;
}
if (move.split(" ").equals("D")) {
nextweight = nextweight+-1;
}
if (move.split(" ").equals("L")) {
nextlenght = nextlenght-1;
}
if (move.split(" ").equals("R")) {
nextlenght = nextlenght+1;
}
if (nextlenght == nullenght && nextweight == nulweight) {
return true;
} else {
return false;
}
}
}
У вас неправильная логика.
Сначала разберитесь, что делает функция split()
, пока это выглядит как необдуманно скопированный кусок кода перед пересдачей.
move.split(" ")
вообще закидывает всё в массив, которого у вас нет. В функцию moveRobot
передаётся та же самая строка "UUDLDR", которую вы в дальнейшем сравниваете на равенство с буквами, что априори неправильно, поэтому по итогу работы функции вы увидите false
.
Какова могла быть правильная логика:
Пройтись по строке посимвольно, если вверх - значит по Оси ушел на +1 вверх, аналогично с 3 другими буквами.
Итог - если по оси Х и У переменные будут 0.
public static boolean moveRobot(int nextlenght, int nextweight, String move) {
for (int i = 0; i < move.length(); i++) {
System.out.println(Character.toString(move.charAt(i)));
if (Character.toString(move.charAt(i)).equals("U")) {
nextweight = nextweight + 1;
}
if (Character.toString(move.charAt(i)).equals("D")) {
nextweight = nextweight - 1;
}
if (Character.toString(move.charAt(i)).equals("L")) {
nextlenght = nextlenght - 1;
}
if (Character.toString(move.charAt(i)).equals("R")) {
nextlenght = nextlenght + 1;
}
}
if (nextlenght == 0 && nextweight == 0) {
return true;
} else {
return false;
}
}
Пример на ideone.
В общем создай новую переменную String[] spl;
и ей задай значение move.split(" ");
Потом все if
занеси в цикл:
int num = 0;
while (num < spl.length){
}
Аренда удаленного сервера: цены, провайдеры и условия. Руководство для начинающих
Мне надо подключиться к базе данных из NetbeansЯ ввожу все данные которые требуются
Как преобразовать текстовую String, с фиксированной длиной (16 символов) в Int и обратно?
Могу ли я как-то изменить значение, скажем, логической переменной в момент закрытия окошка JFrame?