当用户输入“Q”时,循环不会显示结果

时间:2013-10-22 20:30:14

标签: java while-loop switch-statement exit-code

我认为这是一个错误:
线程“main”中的异常java.lang.NumberFormatException:对于输入字符串:“q”
at java.lang.NumberFormatException.forInputString(Unknown Source)
在java.lang.Integer.parseInt(未知来源)
在java.lang.Integer.parseInt(未知来源)
在exercise.GPACalculator.main(GPACalculator.java:53)

public static void main(String[] args) 
{
            String input = "";
    String letterGrade = "";
    String creditHour = "";
    int credits = 0;
    int points = 0;
    int course = 1;
    int gpa;
    String grade = "";

    String greeting = "Hello, this program will calculate your GPA. You will be asked \n"+
            "to enter your letter grade for each class, then you will be asked to enter \n"+
            "the corresponding number of credits for that class. Once all the grades and \n"+
            "credits have been entered, the program will display your GPA.";
    JOptionPane.showMessageDialog(null,greeting,"Greeting - Introduction",1);

    String gradePrompt = "Enter your letter grade (A, B, C, D, F)\n"+
            "Press \"Q\" to quit and display your results";
    String creditPrompt = "Enter the credit hours for course "+course+" (0, 1, 2, 3, 4, 5, 6)\n\n"+
            "Press \"Q\" to quit and display your results";

    do      
    {
        input = JOptionPane.showInputDialog(null,gradePrompt,"Enter grade",1);
        letterGrade += input.toUpperCase();

        input = JOptionPane.showInputDialog(null,creditPrompt,"Enter credit hours",1);
        creditHour += input.toUpperCase();
        course++;
        if(input.toUpperCase().equals("Q"))
            continue;
            credits = Integer.parseInt(input);

            switch (grade) {
            case "A":  points = 4;
                break;
            case "B":  points = 3;
                break;
            case "C":  points = 2;
                break;
            case "D":  points = 1;
                break;
            case "F":  points = 0;
                break;
            }

        //input = JOptionPane.showInputDialog(null,"Do you want to quit? (Press Q "+
        //      "to quit, no to continue)" ,"Do you want to quit?",1);
    }while(!input.toUpperCase().equals("Q"));

    input = input.substring(0,input.length()-1);

    gpa = points / credits;

    String results = "The courses you entered are:\n\n"+
            "Grade  "+"Hours    \n\n"+
            letterGrade+"   \n\n"+creditHour+"\n\n"+
            "Resulting in a GPA of "+gpa+"\n\n"+
            "This program will now terminate!";

    JOptionPane.showMessageDialog(null, new JTextArea(results),
            "GPA results",1);
}

}

3 个答案:

答案 0 :(得分:2)

问题在于此部分

String creditPrompt = "Enter the credit hours for your course (0, 1, 2, 3, 4, 5, 6)\n"+
            "Enter Q to display your results\n\n";    
input = JOptionPane.showInputDialog(null,creditPrompt,"Enter grade",1);
credits = Integer.parseInt(input);

您正在尝试将“Q”解析为int。您应首先检查输入是否为“Q”,然后解析输入以获得信用

答案 1 :(得分:0)

目前

credits = Integer.parseInt(input);

您正在将输入转换为整数。如果输入是“Q”而不是数字,则抛出NumberFormatException。您需要在代码中为输入提供数字或处理NumberFormatException。

答案 2 :(得分:0)

由于堆栈跟踪显示它无法在此处将字符串转换为整数:

credits = Integer.parseInt(input);

你的while循环检查输入是否有值'Q'。但问题是你更新while代码本身内部的输入值。因此,当您提供值Q时,循环将完成当前迭代并在检查下一次迭代时中断。我建议你在循环结束时添加另一个输入。

input = JOptionPane.showInputDialog(null,"Do you want to quit? Press Q" ,"Do you want to quit? Press Q ",1);