Do-while,try-catch循环错误

时间:2014-11-25 02:49:43

标签: java

我正在尝试为学校项目编写代码,主要目标是根据您输入的主题和单位数来获得学生学期的平均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);

4 个答案:

答案 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的顶部并保持同样的状态。