Почему этот цикл дважды? Почему методы не работают? - PullRequest
0 голосов
/ 07 ноября 2019
public static void main(String[] args) {

    Scanner userInput = new Scanner(System.in);
    int x = 20;
    String choice = "";
            while(x!=0) {

            System.out.println("What would you like to do? Enter help for commands.");
            choice = userInput.next().toLowerCase();

            if(choice.equals("go right")) method(); 
            if(choice.equals("go left")) method();
            if(choice.equals("go forwards")) method();
            if(choice.equals("go backwards")) method();
            if(choice.equals("help")) System.out.println("I can print!");

            x--;
            System.out.println("Value of x: " + x);

        }
}

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

 public void method(){
      System.out.println("methoding");
}

Кроме того, метод не запускается при вызове из оператора if, но оператор print будет.

Ответы [ 2 ]

0 голосов
/ 07 ноября 2019
  1. Вы должны добавить static к method, потому что теперь это метод экземпляра, и его нельзя вызывать из статической функции, такой как main.
  2. Не проверяйте x != 0. Возможно, это работает, но в сложном цикле, где x может уменьшать более одного раза, он может проходить 0, переходить в отрицательные значения и никогда не заканчивать цикл. Вместо этого отметьте x > 0.
  3. Используйте вместо этого for цикл while, если вам необходимо увеличить / уменьшить переменную, контролирующую цикл в конце цикла.
0 голосов
/ 07 ноября 2019

Ваш метод не вызывается, потому что userInput.next() будет возвращать только следующее слово (т. Е. До пробела). Вы должны изучить .nextLine() или .useDelimiter(), чтобы изменить это поведение и вернуть целую строку.

Это также объясняет, почему x уменьшается вдвое - если вы наберете «идти вправо», это будет считаться двумя отдельными .next() s.

...