2014-11-25 83 views
0

我试图为学校项目编写代码,主要目标是根据您输入的主题和单位数来获得学生学期的平均GPA,然而,如果我输入了尝试输入0,程序进入一个无限的try-catch循环与“你只能输入正数”即时通讯使用valueOf(),因为我希望用户能够键入“salir”这意味着退出,退出程序。Do-while,try-catch循环错误

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

东西在逻辑可笑,我想可能是放错了地方'continue' – Coffee 2014-11-25 02:53:29

回答

1

在try块,你写之前

continue; 

但经过“你只能输入POS itive numbers“,你应该提示用户输入另一行,并等待用户输入。

“continue”语句跳到循环结尾并导致循环的第二部分不运行。这就是循环无限期运行的原因。

0

移动阅读cadenatry

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. 
+0

这是正确的答案,但我想你也应该鼓励OP步骤远离“真正的”做法。在初始读取时,循环条件应该是'while z <= 0'。 – Rainbolt 2014-11-25 03:09:22

-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的顶部和它保持,同样的事情。

0

Alberto, 有几件事情需要改变才能让程序按照你的意愿工作。既然你是学生,我不会为你解决它。不过,我会回答你的问题。

当你在命令行输入零时,你的程序将从z < = 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; 
 
      }