繁体   English   中英

Java-布尔方法始终返回false

[英]Java - Boolean method always returning as false

 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

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

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

例如,“ 123a456”被认为是有效的。

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

如果由于某种原因您不想中断循环,则可以保留一个“无效计数器”,并确保末尾为0。

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

如果允许使用String.equals方法,它将在一个语句中检查这两个字符串。

 public static boolean isValidNumber(String a1) 
  {

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

我将按照下面的方法重写您的函数,

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;

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)

您可以使用此一个线性函数使用Regular Expression检查String作为Number有效性

 public static boolean isValidNumber(String a1) 
 {
     return a1.matches("[\\d]+");
 }

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM