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
。
我在这种方法中犯了什么错误?
答案 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]+");
}
希望这有帮助。