我在 java 中用数字和字符串编码时出了点问题
Something wrong in my coding in java with numbers and strings
我尝试使用 netbeans 开发一个 java 程序,其中的 GUI 接受来自五个文本字段的主题分数,并在各自的文本字段中显示总分、百分比和成绩。
问题是我在执行 GUI 时遇到错误。我尝试用 double 替换 int 来保存百分比的十进制值,但这没有帮助。我找不到任何错误,因为我是初学者,所以我无法理解我的 netbeans 在监视器中给出的错误。请帮忙。
ERRORS: Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: " 34"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:481)
at java.lang.Integer.parseInt(Integer.java:527)
at NewJFrame.submit_buttonActionPerformed(NewJFrame.java:173)
at NewJFrame.access[=11=]0(NewJFrame.java:4)
at NewJFrame.actionPerformed(NewJFrame.java:60)
这是我完成的编码。
int sub1_ = Integer.parseInt(sub1.getText());
int sub2_ = Integer.parseInt(sub2.getText());
int sub3_ = Integer.parseInt(sub3.getText());
int sub4_ = Integer.parseInt(sub4.getText());
int sub5_ = Integer.parseInt(sub5.getText());
// Here each subject holds a max. of 100 marks.
int a = sub1_+sub2_+sub3_+sub4_+sub5_;
total_marks.setText(""+a);
// Since each subject holds a max. of 100 marks, the total marks of five subjects sums up to 500.
int b = (a/500)*100;
percentage.setText(b+"%");
if(b<=100&&b>=91)
{grade.setText("A1");}
else if(b<=90&&b>=81)
{grade.setText("A2");}
else if(b<=80&&b>=71)
{grade.setText("B1");}
else if(b<=70&&b>=61)
{grade.setText("B2");}
else if(b<=60&&b>=51)
{grade.setText("C1");}
else if(b<=50&&b>=35)
{grade.setText("C2");}
else if(b<=34&&b>=0)
{grade.setText("D");}
else {grade.setText("");}
java.lang.NumberFormatException: For input string: " 34"
Trim String
使用解析方法之前的空格。
try {
int sub1_ = Integer.parseInt(sub1.getText().trim());
int sub2_ = Integer.parseInt(sub2.getText().trim());
int sub3_ = Integer.parseInt(sub3.getText().trim());
int sub4_ = Integer.parseInt(sub4.getText().trim());
int sub5_ = Integer.parseInt(sub5.getText().trim());
} catch (NumberFormatException e) {
// invalid input
}
在某些时候,您正在尝试解析整数“34”,前导 space 是解析方法的问题。
您应该确保您的整数在创建时没有白色space,或者使用 trim() 函数删除前导和尾随白色space,
除了已经报告的问题之外,行 int b = (a/500)*100;
应该是 int b = (a * 100) / 500;
或更简单的 int b = a/5;
。除以 500 向下舍入为整数,因此如果 a
小于 500,则结果为零。
除了提出的问题之外,还有一种方法可以减少代码中的混乱。
例如,您有多个 if 语句,它们都执行相同的操作,但编号不同。
在这种情况下,您可以创建一个函数。
private boolean inRangeOf(int value, int max, int min) {
return value <= max && value >= min;
}
然后您可以调用 inRangeOf(x, a, b)
来替换您的条件
if( inRangeOf(b, 100, 91) ) {
grade.setText("A1");
}
else if( inRangeOf(b, 90, 81) ) {
grade.setText("A2");
}
else if( inRangeOf(b, 80, 71) ) {
grade.setText("B1");
}
我尝试使用 netbeans 开发一个 java 程序,其中的 GUI 接受来自五个文本字段的主题分数,并在各自的文本字段中显示总分、百分比和成绩。 问题是我在执行 GUI 时遇到错误。我尝试用 double 替换 int 来保存百分比的十进制值,但这没有帮助。我找不到任何错误,因为我是初学者,所以我无法理解我的 netbeans 在监视器中给出的错误。请帮忙。
ERRORS: Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: " 34"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:481)
at java.lang.Integer.parseInt(Integer.java:527)
at NewJFrame.submit_buttonActionPerformed(NewJFrame.java:173)
at NewJFrame.access[=11=]0(NewJFrame.java:4)
at NewJFrame.actionPerformed(NewJFrame.java:60)
这是我完成的编码。
int sub1_ = Integer.parseInt(sub1.getText());
int sub2_ = Integer.parseInt(sub2.getText());
int sub3_ = Integer.parseInt(sub3.getText());
int sub4_ = Integer.parseInt(sub4.getText());
int sub5_ = Integer.parseInt(sub5.getText());
// Here each subject holds a max. of 100 marks.
int a = sub1_+sub2_+sub3_+sub4_+sub5_;
total_marks.setText(""+a);
// Since each subject holds a max. of 100 marks, the total marks of five subjects sums up to 500.
int b = (a/500)*100;
percentage.setText(b+"%");
if(b<=100&&b>=91)
{grade.setText("A1");}
else if(b<=90&&b>=81)
{grade.setText("A2");}
else if(b<=80&&b>=71)
{grade.setText("B1");}
else if(b<=70&&b>=61)
{grade.setText("B2");}
else if(b<=60&&b>=51)
{grade.setText("C1");}
else if(b<=50&&b>=35)
{grade.setText("C2");}
else if(b<=34&&b>=0)
{grade.setText("D");}
else {grade.setText("");}
java.lang.NumberFormatException: For input string: " 34"
Trim String
使用解析方法之前的空格。
try {
int sub1_ = Integer.parseInt(sub1.getText().trim());
int sub2_ = Integer.parseInt(sub2.getText().trim());
int sub3_ = Integer.parseInt(sub3.getText().trim());
int sub4_ = Integer.parseInt(sub4.getText().trim());
int sub5_ = Integer.parseInt(sub5.getText().trim());
} catch (NumberFormatException e) {
// invalid input
}
在某些时候,您正在尝试解析整数“34”,前导 space 是解析方法的问题。
您应该确保您的整数在创建时没有白色space,或者使用 trim() 函数删除前导和尾随白色space,
除了已经报告的问题之外,行 int b = (a/500)*100;
应该是 int b = (a * 100) / 500;
或更简单的 int b = a/5;
。除以 500 向下舍入为整数,因此如果 a
小于 500,则结果为零。
除了提出的问题之外,还有一种方法可以减少代码中的混乱。
例如,您有多个 if 语句,它们都执行相同的操作,但编号不同。 在这种情况下,您可以创建一个函数。
private boolean inRangeOf(int value, int max, int min) {
return value <= max && value >= min;
}
然后您可以调用 inRangeOf(x, a, b)
if( inRangeOf(b, 100, 91) ) {
grade.setText("A1");
}
else if( inRangeOf(b, 90, 81) ) {
grade.setText("A2");
}
else if( inRangeOf(b, 80, 71) ) {
grade.setText("B1");
}