Scanner.next () принимает более 1 слова в цикле - PullRequest
0 голосов
/ 15 марта 2019

Я делаю игру в своем классе java и пытаюсь спросить пользователей, на какую сложность они хотят играть. Однако, похоже, что IN.next() принимает более 1 слова, потому что оно находится в цикле. Как мне получить только первое слово?

public int configureDifficulty() {      
    String level = "1";
    println("At what difficulty would you like to play at?");
    println("Type 1 for easy, 2 for medium, 3 for hard.");

    while (true) {

        level = IN.next();
        try {
            return Integer.parseInt(level);
        }
        catch (NumberFormatException ex) {
            println("Try again");
        }
    }
}

Консоль

At what difficulty would you like to play at?
Type 1 for easy, 2 for medium, 3 for hard. 
test test test test test
Try again
Try again
Try again
Try again
Try again

Как заставить мою программу печатать только одну строку «Попробуйте снова», даже если пользователи вводят более 1 слова?

Ответы [ 3 ]

0 голосов
/ 15 марта 2019

Вы можете использовать nextLine метод Scanner, чтобы прочитать ввод как String, а затем преобразовать его, как вы хотите. Вы можете сделать что-то вроде этого.

import java.util.*;

class GFG {
    public static void main (String[] args) {
        int d = configureDifficulty();

        System.out.println(d);
    }



    public static int configureDifficulty() {

    String level = "1";
    System.out.println("At what difficulty would you like to play at?");
    System.out.println("Type 1 for easy, 2 for medium, 3 for hard.");

    Scanner in = new Scanner(System.in);

    while (true) {

        level = in.nextLine();
        try {
            return Integer.parseInt(level);
        }
        catch (NumberFormatException ex) {
            System.out.println("Try again");
        }
    }

}
}
0 голосов
/ 15 марта 2019

То, что вы хотите прочитать, это целое число (1,2 or 3) для определения сложности, поэтому я предлагаю вам использовать scanner.nextInt(), чтобы вам не нужно было выполнять синтаксический анализ и дополнительный блок try-catch.

Кроме того, вы не указали свой полный код (как scanner объект инициализируется и используется в других местах), но с тем, что вы дали, я не вижу, чтобы next() потреблял более одного символа,Если это так, и вы не хотите заменять его на scanner.nextInt(), используйте scanner.nextLine().Надеюсь, это поможет

public static void main(String[] args) {
    String level = "1";
    System.out.println("At what difficulty would you like to play at?");
    System.out.println("Type 1 for easy, 2 for medium, 3 for hard.");
    Scanner scan = new Scanner(System.in);
    while(true)
    {   
        System.out.println(scan.nextInt());
    }
}
0 голосов
/ 15 марта 2019

Если вы хотите позаботиться о словах, напечатанных в одной строке, вам придется использовать метод nextLine в сканере. Метод вернет строку, а затем вам придется проанализировать и написать логику.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...