[英]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.