【发布时间】:2020-02-19 05:07:43
【问题描述】:
第二种方法中的第一个循环完美运行。当用户输入字符而不是数字时,会捕获 InputMismatchException 并提示用户仅重新输入数字才能继续。 第二个循环失败:如果为下一个问题输入了字符,则会捕获 InputMismatchException 并显示“...请再试一次”,但随后程序继续运行,而不会强制用户重新输入数字。 是否有可能在 1 个方法内有超过 1 个 do/while、try/catch 的 InputMismatchException? 我不知道我做错了什么。我认为我在理论上是对的,但显然不是! 如何在不分离到不同方法的情况下解决此问题(因为那样我的计算方法将不起作用)?
{
Scanner input = new Scanner( System.in );
boolean continueLoop = true;
do{
System.out.print("\nPlease enter weight");
try{
stone = input.nextInt();
while (...)
{
System.out.print("...");
stone = input.nextInt();
}
continueLoop = false;
}
catch ( InputMismatchException inputMismatchException)
{
System.err.printf( "\nException: %s\n",
inputMismatchException );
input.nextLine();
System.out.println("...Please try again.\n" );
}
}while ( continueLoop );
do{
System.out.print("...");
try{
pounds = input.nextDouble();
while (...)
{
System.out.print("...");
pounds = input.nextDouble();
}
continueLoop = false;
}
catch ( InputMismatchException inputMismatchException)
{
System.err.printf( "\nException: %s\n",
inputMismatchException );
input.nextLine();
System.out.println("..." );
}
}while ( continueLoop ); //code continues more methods...
【问题讨论】:
-
当第一个循环开始时,
continueLoop为真,因为它是这样初始化的。但是当第二个循环开始时,continueLoop为假,因为那是导致第一个循环终止的原因。 -
在后续循环之前需要将
continueLoop的值重置为true -
另外,第二个
catch中的input.nextDouble();会烧坏你。它可能应该是input.nextLine();和另一个一样,或者完全省略。 -
我试图重置 boolean continueLoop = true;在第一个循环之后,现在它给了我一个与我的 main 方法相关的错误,该方法也有 boolean continueLoop = true;。它说它已经在main中定义了。我已经编辑了上面的代码以包含我的主要方法。这让我很困惑。 (我显然是 Java 新手)
-
@Dawood ibn Kareem 谢谢!我已将其更改为 nextLine
标签: java exception while-loop boolean inputmismatchexception