boolean z = false;
do {
try {
a = sc.nextInt();
z = true;
}
catch(Exception e) {
}
}
while(!z);
试试这个。如果您第一次尝试整数,则整数将正确执行。但是,如果您输入错误的文本类型,即使您接下来输入int并跳过将布尔值分配为true的情况,也会变成无限循环。为什么是这样?
您的问题出在不处理行尾令牌而使扫描器挂起。您想做这样的事情:
import java.util.Scanner;
public class Foo2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = 0;
boolean catcher = false;
do {
try {
System.out.print("Enter a number: ");
a = sc.nextInt();
catcher = true;
} catch (Exception e) {
} finally {
sc.nextLine();
}
}
// !!while(catcher == false);
while (!catcher);
System.out.println("a is: " + a);
}
}
另外,虽然(z == false)是错误形式。使用while(!z)会更好。这样可以防止while(z =
false)错误,并且是表达此错误的一种更简洁的方法。
为Marcelo编辑:
Marcelo,感谢您的输入和建议!您是在说以下if块中的条件不会更改布尔垃圾邮件的值吗?
boolean spam = true;
if (spam = false) {
System.out.println("spam = false");
}
System.out.printf("spam = %b%n", spam);
因为如果确实要更改它,那么编码人员将不会期望这样做(如果他们打算写if)(垃圾邮件==
false),那么这样做可能会产生细微而危险的副作用。再次感谢您为我澄清这一点!
嗨,我正在编写一个程序,它使用Scanner从用户那里获取输入,然后使用布尔方法检查输入的长度是否不超过六个字符。问题是,如果长度小于六个,我使用了while循环来不断请求输入;但是在第一次错误输入后,如果你插入一串六个字母或更长的字符串,循环仍然会继续。这是程序: 谢谢
我正在尝试编写使用Scanner类从用户那里获取输入的代码。但是hasNext()、hasNextInt()和hasNextLine()每次都会运行无限循环。
我想让用户输入一个String和四个整数值,如果用户输入的类型不匹配,我想让程序继续要求用户输入整数值,为什么代码会一直循环,如果用户插入了错误的类型,永远不会等待用户输入?
我有一个简单的Do-While循环,它使用的扫描器功能不正常。代码应该显示一个文本,提示用户输入字符串,用户输入字符串,然后程序再次显示相同的文本,并提示用户输入另一个字符串。 程序所做的是显示正确的消息,用户输入一个字符串,然后提示用户输入一个字符串,但用户输入之前没有文本。用户输入文本后,它就会正常工作。 查看我的代码,我看不出程序有任何理由在不向用户显示文本的情况下提示用户两次输入。
问题内容: 在Java中,出现此异常: 从此Java代码: 抛出异常 System.out.println(file.next()。charAt(counter)); 异常是什么意思? 问题答案: 您在循环的每次迭代中都调用两次,因此,当您快要结束时,您会跳出列表的末尾,编译器会告诉您那里什么也没有。 代替这个: 改为这样做: 看这里
这个代码中的对象扫描仪有什么问题? 当我选择案例2时,我得到了这个错误: 我认为scanner首先声明为int,现在在切换之后,我用类型double收集答案。我不太确定,我需要更多地了解scanner类是如何工作的。