为什么必须在if语句中定义扫描程序?

时间:2016-02-22 15:30:18

标签: java if-statement

为什么以下代码有效:

import java.util.Scanner;

public class WholeNumber
{


    public static void main(String[] args)
    {
        System.out.println("Please enter a number:");
        Scanner scanner = new Scanner(System.in);
        if (scanner.hasNextInt())
        {
            float number = scanner.nextFloat(); //The if statement is testing THIS scanner value.
            System.out.println("The number you entered is an integer.");
        }
        else
        {
            System.out.println("The number you entered is not an integer.");
        }
    }
}

但是这段代码并没有:

import java.util.Scanner;

public class WholeNumber
{


    public static void main(String[] args)
    {
        System.out.println("Please enter a number:");
        Scanner scanner = new Scanner(System.in);
        float number = scanner.nextFloat(); //But when I put the scanner out here, it doesn't work??
        if (scanner.hasNextInt())
        {
            System.out.println("The number you entered is an integer.");
        }
        else
        {
            System.out.println("The number you entered is not an integer.");
        }
    }
}

看起来您必须首先定义扫描仪,以便 if 语句可以知道它正在检查什么。否则,它如何知道它要检查的是什么?

当我将scanner.nextFloat行放在 if 语句之外时,它会编译但在用户输入输入时在运行时被卡住。如果我将该行放在外面并将 if 语句更改为" number.hasNextInt,"我收到编译时错误。

2 个答案:

答案 0 :(得分:1)

在测试下一个int之前,您正在从;; platform-dependent! (spit "spit.txt" (String. b)) ;; better (spit "spit.txt" (String. b java.nio.charset.StandardCharsets/UTF_8)) 中取出值:

Scanner

上述行会从 float year = scanner.nextFloat(); 中移除int,因此Scanner将返回hasNextInt()

附注:不确定您使用falsehasNextInt()使用nextFloat()Float ...

的原因

答案 1 :(得分:1)

如果"" -call位于" next" -call之后,扫描仪将等待2个值。

这是因为var CookieJar = unirest.jar(true); 等待一个值,消耗它,然后返回它,而next___()等待一个值,将其推回,然后返回它的存在。