开始学习Java。有一个问题是如何在控制台中实现输入数据的验证。
请告诉我为什么这段代码循环:
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
boolean number = false;
int ab;
while (number == false)
{
System.out.println("Введите число");
if (in.hasNextInt())
{
ab = Integer.parseInt(in.nextLine());
System.out.println("Вы ввели: " + ab);
number = true;
}
else
{
System.out.println("Вы ввели не число");
}
}
}
但这不是:
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
boolean number = false;
int ab;
while (number == false)
{
System.out.println("Введите число");
if (in.hasNextInt())
{
ab = Integer.parseInt(in.nextLine());
System.out.println("Вы ввели: " + ab);
number = true;
}
else
{
System.out.println("Вы ввели не число");
in.nextLine();
}
}
}
或者写类似的东西的最好方法是什么?
这是指用户输入非整数的情况。对吗?
第一种情况出现循环是因为只对用户输入的数据进行验证。数据已经过验证。没有整数。因此,执行 else 块语句。显示消息“您没有输入数字”,然后循环返回到开头。再次“输入号码”。然后,再次检查用户输入的数据。相同的数据。他们不分享任何地方。要删除它们,必须阅读它们。此读数仅发生在第二个选项 (
in.nextLine();) 的 else 块中。只看书,不写任何地方。之后,扫描仪将再次进入输入等待模式,不会出现循环。该条件
if (in.hasNextInt())检查用户输入的字符是否可以解释为整数。如果在条件之前进行赋值,那么在输入错误的情况下(例如:“4g5”)会产生错误。为了避免这种情况,同样规定了这种条件。如果您确定用户将准确输入一个整数,那么您可以完全不使用任何条件,代码将非常简单:
您甚至可以使所有非数字字符自动从用户输入中删除:
结果:
确实,在后一种情况下,如果用户输入的字符中根本没有数字,则会产生异常。通过添加条件再次解决))
非常感谢,我绞尽脑汁想了很久为什么会出现这种情况,我通过在return方法上循环解决了这个问题,但是这种方法更简单。没有布尔值的简化代码: