Проблемы с Java - входные данные сканера и операторы If (X == Input) - PullRequest
0 голосов
/ 11 сентября 2010

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

Я пытаюсь получить пользовательский ввод с консоли.Я создаю объект Scanner (входной), затем пытаюсь сохранить команду пользователя в строке с именем «команда».Затем я передаю «команду» обратно в исходную функцию runGame.Похоже, что сканер / команда читает текст записи.(Если я ввожу 'd' и затем печатаю содержимое команды, она печатает 'd'.)

Но когда я возвращаю строку и сохраняю ее в nextMove, она ломается.Например, я введу «d», но затем (nextMove == «d»), если оператор не вызывается.Фактически, независимо от того, что я ввожу, вводится только оператор else.

Что я делаю не так?Как я могу это исправить

Вот оригинальный код функции:

public void runGame() {
        drawWindow();
        while(true) {
            String nextMove = takeInput();
            if(nextMove == "d")
                System.out.print("WORRRRDDD d");
            else if(nextMove == "w")
                System.out.print("WORRRRDDD w ");
            else {
                drawWindow();
                System.out.print("YOU GOT ELSED");
                continue;
          }
        }
}

А вот код функции takeInput / Scanner:

public String takeInput() {
    String command;
    input = new Scanner(System.in);     // "input" is the Scanner object used for all input.
    try{
        System.out.print("Enter command (d, w, stop, restart, exit):  ");
        command = input.next();
    } catch(Exception e) {
        System.out.println("You entered an invalid command.");
        return null;
    } 
    System.out.println("\n RETURNING COMMAND" + command + " \n");
    return command;
}

Пока вы помогаете (я собираюсь искать, но если я его не найду), как лучше распознать пустой ввод в объекте сканера?

И должны ли они быть?любые другие исключения / ловушки, о которых мне нужно беспокоиться при вводе пользователем в консоли?

Ответы [ 4 ]

2 голосов
/ 11 сентября 2010

Как уже говорили другие, используйте .equals при проверке на равенство между строками.

Кроме того, всякий раз, когда у вас есть константа в проверке равенства, вы должны поставить ее первой. например,

"abc".equals(someString);

Это будет только логическое значение. Принимая во внимание:

someString.equals("abc");

Это может быть логическое значение или исключение NullPointerException.

2 голосов
/ 11 сентября 2010

Вместо использования == используйте .equals(String), поэтому ваша проверка будет выглядеть следующим образом:

if(nextMove.equals("d"))

== проверяет, что переменные являются точно такими же ссылками в памяти, .equals() проверяетчто два экземпляра логически эквивалентны.

1 голос
/ 11 сентября 2010

Вы не должны использовать == для сравнения строк, если я правильно помню, использовать сравнить, сравнить или равно.

0 голосов
/ 11 сентября 2010

Вы не должны использовать метод "==" для сравнения двух строковых объектов. Вам нужно будет использовать метод .equals ().

Ваша измененная часть кода должна выглядеть следующим образом:

    if(nextMove.equals("d"))
        System.out.print("WORRRRDDD d");
    else if(nextMove.equals("w"))
        System.out.print("WORRRRDDD w ");

Почему? ссылка с здесь

Оператор «==» сравнивает два объекта ссылки, чтобы увидеть, относятся ли они к тому же случаю. Это проверяет являются ли два объекта именно тот же объект или нет. Две строки могут быть разные объекты, но могут иметь одно и то же значение персонажи в них). В таком случае, «==» вернет false.

Будьте особенно внимательны при сравнении объекты. Если вы хотите увидеть, два объекта одинаковы или нет, то используйте «==» или используйте equ (), чтобы увидеть, они имеют одинаковую ценность.

Также проверьте следующие ссылки:

http://www.zparacha.com/java-string-comparison/

http://www.devdaily.com/java/edu/qanda/pjqa00001.shtml

http://www.javabeginner.com/learn-java/java-string-comparison

...