Java - 布尔方法始终返回false

时间:2014-02-28 07:37:16

标签: java boolean

 public static boolean isValidNumber(String a1) 
  {

    String x = ("0123456789");
    boolean valid = false; 

    for (int i = 0; i < 4; i++) {
    char c = a1.charAt(i);

      for (int j = 0; j < 10; j++) {
          if ( c == x.charAt(j)) {
            valid = true;
          }
          else {
            valid = false;
          }
        }
      }

      return valid;
  }

上述方法检查四字符串的输入是否由字符0123456789组成。但是,无论输入是什么,该方法始终返回false

如果我要将else语句中的有效值更改为true,则该方法将始终返回为true

我在这种方法中犯了什么错误?

5 个答案:

答案 0 :(得分:2)

一旦找到不匹配的字符,请中断循环,否则下一个匹配字符会将valid设置为true。

e.g。 “123a456”被认为有效。

for (int j = 0; j < 10; j++) {
    if ( c == x.charAt(j)) {
        valid = true;
    }
    else {
        valid = false;
        break;
    }
}

如果由于某种原因你不想打破循环,你可以保留一个“无效的计数器”,并确保最后为0。

当然,对于你在这里所做的事情,Integer.parseInt()可能是你最好的选择; - )

答案 1 :(得分:1)

String.equals方法会在允许使用的情况下在单个语句中检查这两个字符串。

 public static boolean isValidNumber(String a1) 
  {

    String x = ("0123456789");
    return x.equals(a1);
  }

答案 2 :(得分:1)

我会重写你的功能,如下所示,

String x = ("0123456789");
boolean valid = false; 

for (int i = 0; i < 4; i++) {
   char c = a1.charAt(i);

   boolean isCharOK = false;
   for (int j = 0; j < 10; j++) {
      if ( c == x.charAt(j)) {
         isCharOK = true;
         break;
      }
   }

   if (!isCharOK) {
      valid = false;
      break;
   }
}

return valid;

答案 3 :(得分:1)

John3136非常正确,但我想为你的整个任务提出更好的解决方案:

final static String x = "0123456789";
public static boolean isValidNumber(String a1) {
    for (int i = 0; i < a1.length(); ++i) {
        if (x.indexOf(a1.charAt(i)) == -1) return false;
    }
    return true;
}

简而言之:上面的代码“查找”参数字符串a1中由数字组成的字符串中的每个字符。如果能找到它,继续。如果不能,则表示a1不仅包含数字而且返回false。如果它通过所有a1个字符,则返回true:)

正如评论中所要求和描述的那样 - 处理参数字符串中的重复字符:

final static String x = "0123456789";
public static boolean isValidNumber(String a1) {
    for (int i = 0; i < a1.length(); ++i) {
        final char currentChar = a1.charAt(i);
        if (x.indexOf(currentChar) == -1 || a1.indexOf(currentChar, i+1) != -1)
            return false;
    }
    return true;
}

函数调用a1.indexOf(currentChar, i+1)实质上检查字符串的其余部分是否有任何重复字符(从位置i+1开始更远)。这意味着如果它能够找到重复的char,则该方法返回false :)希望这会有所帮助,如果您需要,可以在String.indexOf(int, int)函数中获取更多信息:

http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#indexOf(int, int)

答案 4 :(得分:0)

您可以使用此单一班轮功能使用String

检查Number作为Regular Expression的有效性
 public static boolean isValidNumber(String a1) 
 {
     return a1.matches("[\\d]+");
 }

希望这有帮助。