Java:试着理解如何使用扫描器从用户那里获取输入



我有这个程序和一些关于扫描仪类的。next(),。nextint(),。hasnext()和。hasnextint()如何工作的问题。提前感谢你的任何帮助:)

import java.util.Scanner;
public class test {
    public static void main (String[] args) {
    Scanner console = new Scanner(System.in);
    int age;
    System.out.print("Please enter your age: ");
    while (!console.hasNextInt()) {
            System.out.print("Please re-enter your age: ");
            console.next();
        }
    age = console.nextInt();
    System.out.println("Your age is "+age);
    }  
}

1/当!console.hasNextInt()第一次执行时,为什么它要求输入?

我认为首先控制台是空的,所以!console. hasnextint ()是True(空不是int),然后它应该直接从"请输入您的年龄:""请重新输入您的年龄:"但我的想法似乎是错误的。

在这里,用户需要在"Please re-enter your age:"打印之前输入一些东西。console.next()的数据类型总是一个字符串(我尝试使int s = console.next();,它给出了一个错误),那么为什么这不是一个无限循环?

例如,当涉及到console.next();时,我输入21。为什么age21的值?我认为由于console.hasNextInt(),我需要输入另一个数字,这个新数字将是age的值。

java.util.Scanner.hasNextInt()方法返回true中的Token可以解释为int值使用nextInt()方法获取默认基数。

当您以非整数输入开始时,hasNextInt()将为false,并且您将进入while循环。然后它会提示你重新输入你的年龄。但是如果你从整数开始,你就不会进入循环。你的年龄会被打印出来。

console.next()表示它接受下一个输入令牌并返回String。如果你把代码写成:

String s = null;
while (!console.hasNextInt()) {
    s = console.next();
    System.out.println("You entered an invalid input: " + s);
    System.out.print("Please re-enter your age: ");
}

console.next()用于处理非整数输入。现在,如果您输入一个非整数的twenty,您将看到console.hasNextInt()将为假,console.next()将读取它。

hasNextInt()等待输入字符串,然后告诉您是否可以转换为int。考虑到这一点,让我们讨论一下你的问题:

!console.hasNextInt()第一次执行时,为什么它要求输入?

因为它会阻塞,直到有来自控制台的输入。

console.next()的数据类型总是一个字符串(我试图使int s = console.next();,它给出了一个错误),那么为什么这不是一个无限循环?

因为当输入可以转换为int(例如"21")时,hasNextInt()返回true。

console.next();为例,我输入21。为什么age21的值?我想因为console.hasNextInt()的原因,我需要输入另一个数字,这个新数字将是age的值。

调用next()不等待新的输入,它只是吞下由hasNextInt()测试的输入,以便扫描仪可以移动到下一个。它可以是循环中的第一条语句,效果相同。

相关内容

最新更新