我有一个WHILE
循环,用于检查特定学生的分数。但是,如果值无效(输入小于0且大于100),则不会循环:
int marks= -1;
System.out.print("Student Marks (/100): ");
while (((marks< 0) || (marks> 100))) {
try {
marks = Integer.parseInt(sc.nextLine());
break;
} catch (NumberFormatException nfe) {
System.err.println("Error: Invalid Mark(s)");
System.out.print("Student Marks (/100): ");
}
}
如果输入了数字以外的字符,它会捕获异常。
但如果值小于0或大于100,则不再循环。
我已尝试对其进行许多更改,但没有结果。
感谢任何帮助!
答案 0 :(得分:6)
您应该删除break
语句,因为无论输入marks
的值是什么,它都会使您脱离循环。
答案 1 :(得分:1)
您可以使用marks
条件检查while
循环中的if
,在这里您可以使用break
-
import java.util.Scanner;
public class TakeInput{
public static void main(String args[]){
int marks= -1;
Scanner sc = new Scanner(System.in);
System.out.print("Student Marks (/100): ");
while (sc.hasNext()) {
try {
marks = Integer.parseInt(sc.nextLine());
if(marks<0 || marks>100){
break;
}
//do something
// with the marks
//take new marks
System.out.print("Student Marks (/100): ");
} catch (NumberFormatException nfe) {
System.err.println("Error: Invalid Mark(s)");
System.out.print("Student Marks (/100): ");
}
}
}
}
现在,只要您在n<0 || n>100
继续循环时输入除数字n之外的任何内容。任何NumberFormatExeption
都会将您带到catch
区块。
如果输入34,则转到while块并提示输入下一个数字。
然后,如果你输入56,那么它会同样的事情
当您输入任何String
而不是数字时,它会转到捕获block
此过程将继续,直到您输入无效数字(n> 100 || n <100)。按 Ctrl + C 也会退出循环。
希望它会对你有所帮助。
非常感谢。
答案 2 :(得分:1)
如果要保持循环运行,请始终使用continue而不是break。