Неправильное форматирование ввода / вывода сканера - PullRequest
0 голосов
/ 26 июня 2019

Этот код возвращает правильный конечный результат, но форматирование входов и выходов в консоли неверно.

Вот желаемый результат:

Type your age: hello
Type your age: ?
Type your age: 3.14
Type your age: 25
Type your GPA: a
Type your GPA: bcd
Type your GPA: 2.5
age = 25, GPA = 2.5

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

Вот что я получаю:

Type your age: hello
Type your age: ?
Type your age: 3.14
25
Type your GPA: a
Type your GPA: bcd
2.5
age = 25, GPA = 2.5

Как видите, результат тот же, но форматирование неверное. Я уверен, что это связано с тем, как я использую объект сканера, но мое понимание сканера в настоящее время ограничено.

Вот голый код:

Scanner console = new Scanner(System.in);
System.out.print("Type your age: ");
console.next();
while (!console.hasNextInt()) {
  System.out.print("Type your age: ");
  console.next();
}
int age = console.nextInt();

System.out.print("Type your GPA: ");
console.next();
while (!console.hasNextDouble()) {
  System.out.print("Type your GPA: ");
  console.next();
}
double gpa = console.nextDouble();
System.out.println("age = " + age + ", GPA = " + gpa);

1 Ответ

0 голосов
/ 26 июня 2019

Удалите console.next() перед циклом while вообще, он вам не нужен. После этого вы получите требуемый результат. Когда у вас есть console.next(), вы ищете и возвращаете еще один полный токен, который вам просто не нужен в вашем случае.

        Scanner console = new Scanner(System.in);
        System.out.print("Type your age: ");
        while (!console.hasNextInt()) {
            System.out.print("Type your age: ");
            console.next();
        }

        int age = console.nextInt();

        System.out.print("Type your GPA: ");

        while (!console.hasNextDouble()) {
            System.out.print("Type your GPA: ");
            console.next();
        }

        double gpa = console.nextDouble();
        System.out.println("age = " + age + ", GPA = " + gpa);
...