Повторное использование Java Сканер - PullRequest
0 голосов
/ 10 января 2020

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

import java.util.Scanner;
public class Principal {
    public static void main(String[] args) {
        int x=0,y=0;
        Scanner sc=new Scanner(System.in);
        //Asks for the first number until the user inputs an integer
        System.out.println("First number:");
        while(!sc.hasNextInt()){
            System.out.println("Not valid. First number:");
            sc.nextLine();
        }
        x=sc.nextInt();
        //Asks for the second number until the user inputs an integer
        System.out.println("Second number:");
        while(!sc.hasNextInt()){
            System.out.println("Not valid. Second number:");
            sc.nextLine();
        }
        y=sc.nextInt();
        //Show result
        System.out.println(x+"*"+y+"="+x*y);
    }
}

l oop для первого числа работает нормально. Но второе не делает: если пользователь вводит что-то, что не является целочисленным значением, сообщение « Недействительно. Второе число: » отображается дважды!
Первое число:
г
Недействительно. Первое число:
2
Второе число:
f
Недействительно. Второй номер:
Недействительно. Второе число:
4
2 * 4 = 8

В чем причина такого поведения? Я предполагаю, что делаю что-то не так.
Я пытался использовать два разных сканера (по одному для каждого числа), и проблема исчезает, но я не думаю, что создание большого количества экземпляров - правильный путь.
Кто-нибудь может помочь?

Спасибо.

1 Ответ

2 голосов
/ 10 января 2020

Поскольку даже после принятия первого значения типа int все еще остается символ новой строки для использования,

, поэтому измените значение на

x=sc.nextInt();
sc.nextLine();
...