我为类活动写的以下程序提示用户在0到100之间有无限量的测试标记,当用户输入该范围之外的标记时,它应该告诉用户它的无效(到目前为止工作)在我的程序中)。当用户输入“-1”时,它应该停止程序,然后打印出那些标记的平均值。
import java.util.*;
public class HmWk62 {
static Scanner console = new Scanner(System.in);
public static void main(String[] args) {
int count=1;
int mark, total=0;
double average;
System.out.println("please enter mark "+count);
mark = console.nextInt();
count++;
while ((mark >= 0)&&(mark <= 100)){
System.out.println("Please enter mark "+count);
mark = console.nextInt();
total += mark ;
++count;
while ((mark < 0)||(mark > 100)){
System.out.println("Invalid mark, please re-enter");
mark = console.nextInt();
}
}
}
}
答案 0 :(得分:6)
当用户输入&#34; -1&#34;它应该停止程序,然后打印出那些标记的平均值。
如果用户输入-1,您将永远不会退出验证输入的嵌套循环。
如果要允许-1,则应更改嵌套循环中的条件以允许它:
while (mark < -1 || mark > 100)
另请注意,您在验证之前使用值mark
- 所以如果输入10000,您仍然会向{{1}添加10000然后,在你要求一个新值之前 - 然后你将忽略新值。
此外,您还没有使用输入的total
的第一个值,除了查看是否应该进入循环。
我怀疑你真的想要这样的东西:
mark
答案 1 :(得分:0)
让代码检查是否设置了全局变量。
例如,创建变量:df = structure(list(q1 = "answer1;answer2;ansert4 ", q2 = 1986L), .Names = c("q1",
"q2"), class = "data.frame", row.names = c(NA, -1L))
检查此变量: 像:
boolean userCancelled = false;
答案 2 :(得分:0)
我建议您使用此while
替换do while loop
循环,如下所示:
do {
System.out.println("Please enter mark "+count);
mark = console.nextInt();
if(mark == -1){
break;
}else if((mark >= 0)&&(mark <= 100)){
total += mark ;
++count;
}else{
System.out.println("Invalid mark, please re-enter");
mark = 0;
}
} while ((mark >= 0)&&(mark <= 100));
答案 3 :(得分:-1)
然后内部的while循环就是你陷入其中的一个。
一方面,你需要一个无效的标记才能退出, 但另一方面,程序会拒绝无效标记并继续询问,直到您输入有效标记。
结果 - 你被困住了。
解决方案:
将内部while
更改为if
,并将平均计算代码和System.exit()
放在if
块中。