逻辑错误与否?

时间:2010-10-27 09:00:47

标签: java

我写了这个将要设置的功能 val = max或min(如果val为null) 或val = val(val表示为整数或“max”或“min”)

在调用时我可能发送checkValue(val,“min”)或checkValue(val,“max”)

 public String checkValue(String val,String valType)
 {

   System.out.println("outside if val="+val);

   if(!val.equals("min") && !val.equals("max"))
     {
     System.out.println("Inside if val="+val);

     try{
         System.out.println("*Inside try val="+val);
         Integer.parseInt(val);
         }

     catch(NumberFormatException nFE)
         {
         System.out.println("***In catch val="+val);
         val=valType;
         }

     return val;
     }
     else
     {
       return val;
     }
}

但问题是val是否为null 如果* * ** * * val = null 显示。 可以告诉我这是一个逻辑错误吗? 为什么我会纠正?

4 个答案:

答案 0 :(得分:4)

如果val为空,则表达式val.equals("min")将抛出异常。

您可以使用以下方法更正此问题:

if (!"min".equals(val) && !"max".equals(val))

让它进入if区块......但我会在方法开始时亲自处理它:

if (val == null) {
  // Do whatever you want
}

顺便说一下,为了便于阅读,您可能需要考虑在代码中添加更多的空格......目前它非常密集,这使得它更难阅读。

答案 1 :(得分:3)

  

...问题是,如果显示* * ** val = null,则val返回null。可以告诉我这是一个合乎逻辑的错误吗?

输出正确;你是否希望它以这种方式出现取决于你。

下一行

if(!val.equals("min") && !val.equals("max")){

...会抛出NullPointerException,因为您试图取消引用val,即null。您需要添加显式检查val是否为null:

if (val == null) {
    // Do what you want to do when val == null
}

答案 2 :(得分:1)

你应该使用valType而不是val来检查最小值或最大值是否需要检查。

在这种情况下,我建议您使用布尔值或枚举而不是字符串。考虑类似的事情:

/**
 * check the value for minimum if min is true and for maximum otherwise
 */
public String checkValue(String val, boolean min){
   if (min) {
      // ...
   } else {
      // ...
   }
}

答案 3 :(得分:1)

如果你需要将字符串与常量进行比较,你应该反过来写它以使其为空安全:

 if (! "min".equals(val))

虽然这主要是一个样式问题,但我会创建所有方法参数final而不重新分配它们(因为这很令人困惑),你也可以从方法中返回,而不仅仅是结束。或者,如果您想在最后返回,请在最后执行,而不是在returnif分支中使用相同的else语句。