我认为这是一个错误:
线程“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);
}
}
答案 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);