【问题标题】:Condition if a String is empty [closed]条件如果字符串为空[关闭]
【发布时间】:2013-05-12 23:34:48
【问题描述】:

我正在尝试对 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
    }

我不知道我做错了什么。

【问题讨论】:

  • 什么错误??????
  • 你想对这三个变量中的哪一个求和? (另外,我在这里的代码示例中看不到任何文本框)。
  • 旁注:为什么promedioint 而不是double?它不应该包含平均值吗?
  • 你的 if 语句不能处理所有的情况。假设您在 2 中有一个条目,但在 3 中没有,代码不知道在这种情况下该怎么做。另外,如果您在 3 中有条目但在 2 中没有条目,代码也没有说明在这种情况下该怎么做。
  • 你在倒退。 pp1/2/3 永远不会是空的,因为 p1/p2/p3 总是有值(如果你走得那么远)。您需要检查 getText 结果是否为空。

标签: java validation


【解决方案1】:

我会改变顺序,稍微改变一下逻辑:

    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 ) );

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

【讨论】:

    【解决方案2】:

    使用

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

    它只适用于非负数。

    【讨论】:

      【解决方案3】:

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

      所以你需要确保它们不为空并且是有效数字,然后再将其转换为 int

      【讨论】:

      • 我在验证第二个和第三个文本框是否为空时出现错误,可能是if(pp2.isEmpty() && pp3.isEmpty()) !!!
      • Mr @NoobUnChained 只是需要心安。因为当它们为空时他可能会出错。上面的行不会抛出任何错误AFAIK,因为它是一个字符串,他正在检查空
      • @NoobUnChained 是的,你是对的,这就是我在答案中提到的。他会在中间得到NumberFormatException。他可能会认为这是因为如果条件...不要叫我先生朋友。
      • @NoobUnChained - 如果之前的 valueOf 调用没有设置 pp2 和 pp3 ,就无法进行 isEmpty 调用。除非设置了相应的 p 值,否则永远无法合法地达到 valueOf 调用。字符串将始终至少为“0”。
      • @NoobUnChained - 显然 OP 要么没有发布真实代码,要么不知道如何读取异常消息(可能两者都有)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多