我在 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");

}