我正在尝试使用javax.swing。*创建此“综合成绩计算器”。我最近学到的但是,我找不到我的代码有什么问题。我的IDE(Ecliple)没有检测到我的代码中的任何错误,但是当我尝试运行代码时它不会运行。我在哪里弄糟?
BTW:到目前为止,这是我对Java编码的最新知识,因为我是自学成才的,所以我可能不知道任何比这些更高级的代码。
import javax.swing.*;
public class gradeCalcMk3 {
public static double average(double a, double b, double c, double d) {
double ave = a*0.3 + b*0.5 + c*0.1 + d*0.1;
return ave;
}
public static void main(String[] args) {
double grade[] = {0,0,0,0,0};
JTextField name = new JTextField(10);
JTextField q = new JTextField(3);
JTextField ex = new JTextField(3);
JTextField cs = new JTextField(3);
JTextField ilm = new JTextField(3);
JPanel myPanel = new JPanel();
myPanel.add(new JLabel("Name:"));
myPanel.add(name);
myPanel.add(new JLabel("Q:"));
myPanel.add(q);
myPanel.add(new JLabel("Ex:"));
myPanel.add(ex);
myPanel.add(new JLabel("CS:"));
myPanel.add(cs);
myPanel.add(new JLabel("ILM:"));
myPanel.add(ilm);
grade[0] = Double.parseDouble(q.getText());
grade[1] = Double.parseDouble(ex.getText());
grade[2] = Double.parseDouble(cs.getText());
grade[3] = Double.parseDouble(ilm.getText());
grade[4] = average(grade[0], grade[1], grade[2], grade[3]);
double confirm = JOptionPane.showConfirmDialog
(null, myPanel, "Enter Values", JOptionPane.OK_CANCEL_OPTION);
if(confirm == JOptionPane.OK_OPTION) {
JOptionPane.showMessageDialog(null, "Name: " + name.getText()
+ "\n\nQuiz: " + grade[0]
+ "\n\nExam: " + grade[1]
+ "\n\nCS: " + grade[2]
+ "\n\nILM: " + grade[3]
+ "Average: " + grade[4]);
}
}
}
这是我尝试运行时的输出
Exception in thread "main" java.lang.NumberFormatException: empty String
at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source)
at sun.misc.FloatingDecimal.parseDouble(Unknown Source)
at java.lang.Double.parseDouble(Unknown Source)
at gradeCalcMk3.main(gradeCalcMk3.java:32)
答案 0 :(得分:1)
您将需要更多的时间来完成这项工作。
基本上,所有从文本字段中提取值的代码都需要放置在单击按钮或菜单(或其他激活它)的方法上。也就是说,您至少需要两种方法:“设置表单”方法和“处理输入”方法。
发布时,您的JTextFields不包含文本(您使用的构造函数未设置文本-它设置了“列数”)。
所有文本字段均已创建并添加到表单后,下一步就是从其中提取空字符串,然后尝试将它们解析为双精度型。这将生成您遇到的异常。 由于代码全部包含在一个方法中,因此有 zero 的机会,您可以在读取和处理它们之前在字段中输入任何值。
至少,暂时(暂时)注释掉尝试提取值,解析它们并计算平均值的代码。提取,解析和计算代码之后,可以移到我上面提到的按钮或菜单附带的事件处理程序中。
我希望这会有所帮助。
答案 1 :(得分:0)
创建JTextField
的实例时,您只是在使用错误的构造函数
JTextField(int columns) 用指定的列数构造一个新的空TextField。
使用字符串代替,而不是提供整数,例如new JTextField("10")
JTextField(String text) 构造一个使用指定文本初始化的新TextField。
答案 2 :(得分:-1)
Nvm,我发现自己搞砸了,并通过以下方法对其进行了修复:
if(confirm == JOptionPane.OK_OPTION) {
grade[0] = Double.parseDouble(q.getText());
grade[1] = Double.parseDouble(ex.getText());
grade[2] = Double.parseDouble(cs.getText());
grade[3] = Double.parseDouble(ilm.getText());
grade[4] = average(grade[0], grade[1], grade[2], grade[3]);
JOptionPane.showMessageDialog(null, "Name: " + name.getText()
+ "\n\nQuiz: " + grade[0]
+ "\n\nExam: " + grade[1]
+ "\n\nCS: " + grade[2]
+ "\n\nILM: " + grade[3]
+ "Average: " + grade[4]);
}