我正在尝试为学校项目编写代码,主要目标是根据您输入的主题和单位数来获得学生学期的平均gpa,但是,如果我尝试输入0,则程序进行使用&#34进入一个无限的try-catch循环;你只能输入正数" 我使用valueOf()因为我希望用户能够键入" salir"这意味着退出,退出程序。
Scanner LeerTeclado = new Scanner(System.in);
int n=0, i=0, suma=0, promedio=0;
String materia, cadena;
//---------------------------------------------------------------------------
out.println("---------------------------");
out.println("-- School Grades --");
out.println("---------------------------");
//---------------------------------------------------------------------------
out.println("\nType 'salir' to terminate the program");
out.println("-----------------------------------------");
out.print("Type the number of subjects to grade: ");
cadena = LeerTeclado.nextLine();
int z = 0;
if("salir".equals(cadena)){
System.exit(0);
}
if("Salir".equals(cadena)){
System.exit(0);
}
///////////////////////////////////////////////////////////////////
do{
try{
z = Integer.valueOf(cadena);
if(z <= 0){
out.println("...............................................");
out.println(" You can only type positive numbers ");
out.println("...............................................");
out.println("\n");
continue;
}
break;
}catch(NumberFormatException ex){
out.println("\n*You have entered non-numeric characters*");
out.print("\nPlease type the number of subjects again: ");
LeerTeclado.nextLine();
}
}while(true);
答案 0 :(得分:1)
在try块中,在你写
之前continue;
但是&#34;你只能输入正数,&#34;您应该提示用户输入另一行输入,并等待用户输入该输入。
&#34;继续&#34;语句跳到循环结束并导致循环的第二部分不运行。这就是循环无限期运行的原因。
答案 1 :(得分:0)
将阅读cadena
移至try
区块
int z = 0;
do {
try {
cadena = LeerTeclado.nextLine(); // <-- re-read
if ("salir".equalsIgnoreCase(cadena)) { // <-- you might test once.
System.exit(0);
}
// if ("Salir".equals(cadena)) {
// System.exit(0);
// }
z = Integer.valueOf(cadena); // <-- or this loops forever.
答案 2 :(得分:0)
阿尔贝托, 有一些事情需要改变,以使该程序按您希望的方式工作。既然你是学生,我就不会为你解决。不过,我会回答你的问题。
在命令行中键入零时,程序将从z&lt; = 0测试执行到continue语句。 continue语句告诉代码忽略之后的所有内容并返回循环的开头,这样它就会返回到do语句的开头并重复。你需要一些方法来结束循环。
我可以建议你一点一点地编写程序并随着时间的推移进行测试。也就是说,写下不在循环中的部分。一旦工作,在循环中写一些东西并测试。继续这样做,直到程序以你想要的方式工作。
祝你好运
do{
try{
z = Integer.valueOf(cadena);
if(z <= 0){
out.println("...............................................");
out.println(" You can only type positive numbers ");
out.println("...............................................");
out.println("\n");
continue;
}
答案 3 :(得分:-1)
您想使用break
if(z <= 0){
System.out.println("...............................................");
System.out.println(" You can only type positive numbers ");
System.out.println("...............................................");
System.out.println("\n");
break;
}
continue
只是跳到if
的顶部并保持同样的状态。