Java 当无限循环
我正在尝试编写一个方法,要求用户输入一个正整数。如果未输入正整数,则会输出一条消息“请输入正值”。这部分不是问题所在。问题是,当我尝试实现捕获InputMissMatchException的try-catch语句时(如果用户意外输入字符或字符串),循环无限运行,并抛出与InputMistmatchException关联的错误消息 这是我的密码:Java 当无限循环,java,try-catch,do-while,Java,Try Catch,Do While,我正在尝试编写一个方法,要求用户输入一个正整数。如果未输入正整数,则会输出一条消息“请输入正值”。这部分不是问题所在。问题是,当我尝试实现捕获InputMissMatchException的try-catch语句时(如果用户意外输入字符或字符串),循环无限运行,并抛出与InputMistmatchException关联的错误消息 这是我的密码: private static int nonNegativeInt(){ boolean properValue = false;
private static int nonNegativeInt(){
boolean properValue = false;
int variable = 0;
do {
try {
while (true) {
variable = scanner.nextInt();
if (variable < 0) {
System.out.println("Please enter a positive value");
} else if (variable >= 0) {
break;
}
}
properValue = true;
} catch (InputMismatchException e){
System.out.println("That is not a valid value.");
}
} while (properValue == false);
return variable;
}
private static int nonNegativeInt(){
布尔属性值=false;
int变量=0;
做{
试一试{
while(true){
变量=scanner.nextInt();
if(变量<0){
System.out.println(“请输入正值”);
}else if(变量>=0){
打破
}
}
正确值=真;
}捕获(输入不匹配异常e){
System.out.println(“这不是一个有效值。”);
}
}while(properValue==false);
返回变量;
}
您正在捕获异常,但没有更改变量property value的值,因此catch语句将永远运行。添加properValue=true代码>甚至catch语句中的break
语句都提供了所需的功能
我希望我能帮忙 只需在捕获物中添加一条break
语句即可。
顺便说一句,您可以通过如下方式重写while
循环来摆脱它:
try {
variable = scanner.nextInt();
if (variable < 0) {
System.out.println("Please enter a positive value");
} else {
properValue = true;
}
}
//...
试试看{
变量=scanner.nextInt();
if(变量<0){
System.out.println(“请输入正值”);
}否则{
正确值=真;
}
}
//...
本质上,当给定的令牌无效时,扫描仪会遇到错误,因此无法超过该值。当下一次迭代重新开始时,scanner.nextInt()会再次尝试扫描下一个仍然无效的输入值,因为它从未通过该输入值
您要做的是添加行
scanner.next();
在catch子句中,基本上是说跳过那个标记
旁注:您的方法通常过长。你可以把它缩短成这个
private static int nonNegativeInt() {
int value = 0;
while (true) {
try {
if ((value = scanner.nextInt()) >= 0)
return value;
System.out.println("Please enter a positive number");
} catch (InputMismatchException e) {
System.out.println("That is not a valid value");
scanner.next();
}
}
}
您可以在do while循环的开始处声明扫描程序,这样nextInt()就不会反复抛出异常
private static int nonNegativeInt(){
boolean properValue = false;
int variable = 0;
do {
scanner = new Scanner(System.in);
try {
while (true) {
variable = scanner.nextInt();
if (variable < 0) {
System.out.println("Please enter a positive value");
} else if (variable >= 0) {
break;
}
}
properValue = true;
} catch (InputMismatchException e){
System.out.println("That is not a valid value.");
}
} while (properValue == false);
return variable;
}
private static int nonNegativeInt(){
布尔属性值=false;
int变量=0;
做{
扫描仪=新扫描仪(System.in);
试一试{
while(true){
变量=scanner.nextInt();
if(变量<0){
System.out.println(“请输入正值”);
}else if(变量>=0){
打破
}
}
正确值=真;
}捕获(输入不匹配异常e){
System.out.println(“这不是一个有效值。”);
}
}while(properValue==false);
返回变量;
}
这与
两个问题:
- 你需要一个
扫描器异常处理程序中的代码>
。。。而且
- 你不需要两个循环。一个循环就可以了:
private static int nonNegativeInt(){
boolean properValue = false;
int variable = 0;
do {
try {
variable = scanner.nextInt();
if (variable < 0) {
System.out.println("Please enter a positive value");
continue;
} else if (variable >= 0) {
properValue = true;
}
} catch (InputMismatchException e){
System.out.println("That is not a valid value.");
scanner.next();
}
} while (properValue == false);
return variable;
}
private static int nonNegativeInt(){
布尔属性值=false;
int变量=0;
做{
试一试{
变量=scanner.nextInt();
if(变量<0){
System.out.println(“请输入正值”);
继续;
}else if(变量>=0){
正确值=真;
}
}捕获(输入不匹配异常e){
System.out.println(“这不是一个有效值。”);
scanner.next();
}
}while(properValue==false);
返回变量;
}
基本相同的帖子是的,这篇帖子仍然不允许用户纠正错误并输入实际值,只会给你零。这也不会有帮助,因为完全退出循环只会在用户希望重试并输入有效输入时返回0。简单而优雅的解释。非常感谢。感谢所有留下答案的人。:)