Выдает всегда false

121
20 сентября 2019, 03:50

Вот задача Есть поле из клеток по средине которого находится робот. Робот умеет выполнять 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;
        }
    }
}
Answer 1

У вас неправильная логика.

Сначала разберитесь, что делает функция 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.

Answer 2

В общем создай новую переменную String[] spl; и ей задай значение move.split(" ");

Потом все if занеси в цикл:

int num = 0;
while (num < spl.length){
}
READ ALSO
Не могу подключиться к базе данных postgresql из java Netbeans

Не могу подключиться к базе данных postgresql из java Netbeans

Мне надо подключиться к базе данных из NetbeansЯ ввожу все данные которые требуются

120
Как преобразовать текстовую String в Int

Как преобразовать текстовую String в Int

Как преобразовать текстовую String, с фиксированной длиной (16 символов) в Int и обратно?

118
Произвести операцию по закрытию JFrame

Произвести операцию по закрытию JFrame

Могу ли я как-то изменить значение, скажем, логической переменной в момент закрытия окошка JFrame?

123