我已经完成了使用while循环制作一个从9到16输入的因子计算器的任务。条件是如果用户输入的输入不是9到16或int,它应该在开头循环并再次请求输入。
我的代码如下所示:
Scanner myScanner;
int x = 1;
int factorial=1;
int input;
myScanner = new Scanner(System.in);
System.out.println("put in an int and i will show you its factorial");
while (true) {
input = myScanner.nextInt();
if (input<9 || input >16) {
System.out.println("please enter a valid int");
}
else{
break;
}
}
for (int i=input; i >0; i--) {
factorial *= i;
}
问题是,这并不是真的使用while循环回到代码的开头。我真的只是输入一个冗余语句来使它成为一个while循环。
所以我想我的问题是,如果键入了错误的输入,如何进行一个可以回到循环开头的while循环?
答案 0 :(得分:0)
尝试这样做:
Scanner myScanner;
int x = 1;
int factorial=1;
int input = 0;
myScanner = new Scanner(System.in);
System.out.println("Put in an integer value between 9 and 16 and I will show you its factorial. Type -1 to exit.");
while (input != -1) {
//Try block for handling invalid string inputs
try {
input = myScanner.nextInt();
} catch (Exception e){
input = 0;
}
if (input<9 || input >16) {
System.out.println("please enter a valid int");
}
else {
for (int i=input; i >0; i--) {
factorial *= i;
//input = -1; //Optionally end here if that's how things are intended to function
}
System.out.println(factorial);
}
}
使用值(0)初始化输入。并且如果他们输入某个值(即-1),则通知用户循环结束。在else块中移动for循环,并将while条件设置为input != 1
。
或者,如果您希望程序在用户提供有效值时结束,那么在else块中,手动将输入值设置为-1,或者使用break
关键字中断循环
答案 1 :(得分:0)
另一种方法是使用布尔值,例如
boolean validInput = false;
并循环,直到您有有效的输入。这样,当用户在另一个答案中输入-1时,你不会尝试计算一个值