为什么第二个变量采用firs的值?而块是独立的

时间:2018-10-20 16:52:35

标签: java

我是Java的初学者,我们已经了解到,如果两个变量不在同一块中,则它们彼此独立。

我不明白为什么entier2为假时变量entier1为假

System.out.print("enter entier1 : ");
    if (!entree.hasNextInt()) {    
        System.out.println("Enter a number1!");
    } else {
        entier1 = entree.nextInt();
        System.out.println("Entier 1 = " + entier1);
    }

System.out.print("Enter entier2 : ");
    if (!entree.hasNextInt()) {
        System.out.println("Enter a number2!");
    } else {
        entier2 = entree.nextInt();
        System.out.println("Entier 2 = " + entier2);
    }

首先是第一个执行的块,第二个之后 如果第一个集团为假,则第二个集团取第一个集团的“值”


对于一个正确的例子,我们有:

Enter number1 : 45
Entier 1 = 45
Enter number2 : 15
Entier 2 = 15

所以一切都是完美的,因为我有两个数字


但是如果entier1 = "txt"(一个字符串),则结果为entier2 = Enter a number2!

例如,结果为:

Enter number1 : txt
> Enter a number 1 ! 
Enter number2 : Enter a number 2 !

因此,该程序不验证number2的值,因为它取假,因为number1为假(不正确)

所以,我的问题是如果number1为假,为什么number2为假?

Ps:如果问题不清楚,请告诉我有什么可以澄清的

1 个答案:

答案 0 :(得分:0)

如果我理解正确,则仅使用integer检查hasNextInt()输入,但如果条件不成立,则不会丢弃错误的输入,因此下一个条件将再次检查该错误第二次输入并返回与以前相同的结果。在我的代码中,我使用in.nextLine(),所以无论输入是否正确,我都会清空缓冲区。你也可以用这种技术做同样的事情。
如果您想获得正确的号码然后再获得第二个号码,则可以使用以下方法:

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int num1 = getInt(in);
        int num2 = getInt(in);
        System.out.println(num1 + " " + num2);
    }

    public static int getInt(Scanner in) {
        System.out.print("Enter number: ");
        while (true) {
            String line = in.nextLine();
            try {
                int num = Integer.parseInt(line);
                return num;
            } catch (NumberFormatException ex) {
                System.out.print("Enter correct input!!\nEnter nubmer: ");
            }
        }
    }

希望对您有所帮助。我们尝试获取输入,直到仅包含数字(仅此而已)