输入certian编号后停止的while循环

时间:2016-11-17 05:12:31

标签: java

我正在尝试编写一个程序,该程序从用户获取成绩数字,并在输入-1时停止。但是,每次输入-1时,while循环继续运行,如何阻止它运行?

import java.util.Scanner;

public class getLetterGrade {
    public static void main(String[] args) {
        Scanner reader = new Scanner(System.in);
        int count = 0;
        while (count >= 0)
            getGrade();
        count++;
        System.out.println("You entered" + " " + count + " " + "Student(s)");
    }

    public static void getGrade() {
        Scanner reader = new Scanner(System.in);
        double grade;

        System.out.println("Welcome to the grade calculator. \n Please enter a numeric grade. \n After the last student in the class, enter a grade of -1.");
        grade = reader.nextDouble();

        if (grade >= 90)
            System.out.println("That's an A");
        else if (grade >= 80 && grade < 90)
            System.out.println("That's an B");
        else if (grade >= 70 && grade < 80)
            System.out.println("That's an C");
        else if (grade >= 60 && grade < 70)
            System.out.println("That's an D");
        else if (grade <= 50 && grade > 0)
            System.out.println("That's an F");
        if (grade == -1)
            System.out.println("");
    }
}

4 个答案:

答案 0 :(得分:1)

您可以将循环移动到另一种方法中,使其成为“无尽的”#34;循环,并使用return退出它。然后,您可以从该方法返回计数并在main中显示。

它可能看起来像这样。请注意,我也简化了您的分支逻辑,并从输出消息中删除了双重参与者。

我还使用了try-with-resources块,这是确保始终关闭扫描仪的一种方法,并避免资源泄漏。在这种情况下并不严格需要,但仍然是一个良好的习惯。

编辑正如Scary Wombat指出的那样,您可以添加else子句来处理用户输入无效成绩的情况,如果您真的想要。

import java.util.Scanner;

public class GetLetterGrade {
    public static void main(String[] args) {
        int count = getGrades();
        System.out.println("You entered " + count + " grade(s)");
    }

    public static int getGrades() {
        try(Scanner reader = new Scanner(System.in)) {
            int count = 0;

            while(true) {
                System.out.println("Welcome to the grade calculator. \n Please enter a numeric grade. \n After the last student in the class, enter a grade of -1.");


                double grade = reader.nextDouble();

                if (grade >= 90) {
                    System.out.println("That's an A");
                } else if (grade >= 80 ) {
                    System.out.println("That's a B");
                } else if (grade >= 70) {
                    System.out.println("That's a C");
                } else if (grade >= 60) {
                    System.out.println("That's a D");
                } else if (grade >= 0) {
                    System.out.println("That's an F");
                } else if (grade == -1) {
                    return count;
                }
                count++;
            }
        }
    }
}

答案 1 :(得分:1)

需要更改的一些事项......首先,循环保持循环,因为您从未将count设置为小于0,因此条件始终为true。您还可以创建2个Scanner个对象,但只能使用第二个(getGrade())。

尝试使用此代码,并查看注释以查看已更改的所有内容:

    public class getLetterGrade  {

    static Scanner reader;      //Add reader as member variable

    public static void main(String[] args) {
        //Scanner reader = new Scanner(System.in);  //Remove this unused Scanner
        int count = 0;
        reader = new Scanner(System.in);

        while (getGrade())      //Change the condition here so the loop will continue while getGrade() returns true.
            count++;

        reader.close();     //Close the Scanner
        System.out.println("You entered" + " " + count + " " + "Student(s)");
    }

    public static boolean getGrade() {      //getGrade() returns a boolean...


        System.out.println("Welcome to the grade calculator. \n Please enter a numeric grade. \n After the last student in the class, enter a grade of -1.");
        double grade = reader.nextDouble();  //Consider using a try/catch block here.


        if (grade >= 90)
            System.out.println("That's an A");
        else if (grade >= 80 && grade < 90)
            System.out.println("That's an B");
        else if (grade >= 70 && grade < 80)
            System.out.println("That's an C");
        else if (grade >= 60 && grade < 70)
            System.out.println("That's an D");
        else if (grade <= 50 && grade > 0)
            System.out.println("That's an F");
        else if(grade != -1)
            System.out.println("Invaled input!"); //Print if 'grade' is something other then the above statements.
        if (grade == -1) {                      //Add brackets
            System.out.println("");
            return false;                       //return false if -1 was entered...
        }
        return true;                            //else return true
    }
}

答案 2 :(得分:0)

    import java.util.Scanner;

      public class GetLetterGrade {
      public static void main(String[] args) {
        int count = 0;
        while (getGrade() >= 0.0){
            count++;
            System.out.println("You entered" + " " + count + " " + "Student(s)");   
        }

    }

    public static double  getGrade() {
        Scanner reader = new Scanner(System.in);
        double grade;

        System.out.println("Welcome to the grade calculator. \n Please enter a numeric grade. \n After the last student in the class, enter a grade of -1.");
       grade = reader.nextDouble();

        if (grade >= 90)
            System.out.println("That's an A");
        else if (grade >= 80 && grade < 90)
            System.out.println("That's an B");
        else if (grade >= 70 && grade < 80)
            System.out.println("That's an C");
        else if (grade >= 60 && grade < 70)
            System.out.println("That's an D");
        else if (grade <= 50 && grade > 0)
            System.out.println("That's an F");
        if (grade == -1)
            System.out.println("");
        return grade ;
    }
}

答案 3 :(得分:-1)

你的while循环总是取0值并进入while循环,这就是为什么它没有停止..

import java.util.Scanner;

public class getLetterGrade {

public static void main(String[] args) {
    Scanner reader = new Scanner(System.in);
    System.out.println("Welcome to the grade calculator. \n  After the last student in the class, enter a grade of -1.");
    int count = 0;
    int no = -1;
    while (count != -1) {
        no++;
        System.out.println("Please enter the value:-");
        count = reader.nextInt();

        if (count >= 90) {
            System.out.println("That's an A");
        } else if (count >= 80 && count < 90) {
            System.out.println("That's an B");
        } else if (count >= 70 && count < 80) {
            System.out.println("That's an C");
        } else if (count >= 60 && count < 70) {
            System.out.println("That's an D");
        } else if (count <= 59 && count > 0) {
            System.out.println("That's an F");
        }
        if (count == -1) {
            break;
        }
    }
    count++;
    System.out.println("You entered" + " " + no + " " + "Student(s)");
}

}