-5

我正在尝试一个尝试对 3 个等级(3 个文本框)求和的代码,当您单击“计算”按钮时,3 个值被求和并除以 3,(1 个平均等级文本框)

当我验证第二个和第三个文本框是否为空时,我的错误出现了,它应该只取第一个文本框并从中获得平均成绩。

int p1,p2,p3,promedio; 

    p1=Integer.parseInt(par1.getText()); //getting the grade1 textbox info and parsing to int
    p2=Integer.parseInt(par2.getText()); //same , grade2
    p3=Integer.parseInt(par3.getText()); //same, grade3
    promedio=((p1+p2+p3)/3); //summing and dividing to 3
    String pp = String.valueOf(promedio); //parsing avarage grade to string
    pro.setText(pp); //printing the avarage grade to his respective textbox

    String pp1 = String.valueOf(p1); //parsing the 3 grades to strings, to i can validate later
    String pp2 = String.valueOf(p2);
    String pp3 = String.valueOf(p3);

    if(pp2.isEmpty() && pp3.isEmpty()){ //if grade 2 and 3 are empty
        pp = pp1; //avarage grade = p1 (grade 1)
        pro.setText(pp); //printing avarage grade
    }

我不知道我做错了什么。

4

3 回答 3

3

如果par2.getText(),par3.getText()为空,则Integer.parseInt(par1.getText());抛出NumberFormatException

因此,在将其转换为 int 之前,您需要确保它们不为空并且是有效数字

于 2013-05-17T17:59:03.877 回答
0

利用

p3=Integer.parseInt("0" + par3.getText());

它仅适用于非负数。

于 2013-05-17T18:00:28.137 回答
0

我会更改顺序,并稍微更改逻辑:

    String pp1 = par1.getText();
           pp2=...
           pp3=...

    int num = 3;
    if ( pp3.isEmpty() ) --num;
    if ( pp2.isEmpty() ) --num;
    // Add some logic for the case that pp1 is empty 

    p1 = ...
    p2 = .......
    promedio = ( p1 + p2 + p3 ) / num;

    pro.setText( String.valueOf( promedio ) );

在您的代码中,您执行了两次操作,例如将 String 转换为 int,然后再转换回 String 以供稍后验证。所以我稍微改变了一下以显示更短的方式(不过我没有检查我的代码,所以也许你仍然需要改进它:-)

于 2013-05-17T18:03:08.657 回答