0

我将其视为错误:
线程“main”中的异常 java.lang.NumberFormatException:对于输入字符串:“q”
在 java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source )
在 java.lang.Integer.parseInt(Unknown Source)
atexists.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);
}

}

4

3 回答 3

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”,然后解析输入以获得学分

于 2013-10-22T20:35:49.437 回答
0

credits = Integer.parseInt(input);

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

于 2013-10-22T20:37:33.970 回答
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);
于 2013-10-22T20:39:41.000 回答