我正在尝试编写一个包含for循环的方法,该循环遍历从第二个数字到结束数字的字符串,检查以确保字符串该部分中的字符都是数字。
public static boolean hasValidDigits (String nameAccount)
{
for (int i = 1; i < nameAccount.length(); i++)
{
if(Character.isDigit(nameAccount.charAt(i)))
{
return true;
}
else
{
return false;
}
}
(It keeps asking for an extra return statement here, I have no idea why)
}
我希望循环遍历6个字符的最后5个字符检查以确保它们是数字并返回true,否则返回false。
我的问题是代码一直在要求一个不应该需要的额外return语句,当我添加额外的return语句(只是为了让代码工作)时,结果也就是这样,boolean似乎仅用于字符串中的起始数字(将数字更改为另一个字符返回false)但是如果我沿着字符串进一步更改任何其他数字,它仍然会返回true,即使它应该输出false。
任何有关这方面的帮助或推动正确的方向都将是一个很大的帮助。
答案 0 :(得分:2)
考虑重写方法,以便只有一个return语句。在这种情况下,调试并不困难,但如果您有Matheus提到的30个执行路径,那可能会非常棘手。你也可以考虑在这里使用正则表达式。正如您的代码当前所有,不会检查所有数字。
尝试正则表达式此时您的方法体可能类似于
return yourString.matches(".\\d{5}");
答案 1 :(得分:0)
您的方法实际上按预期运行。 返回语句的作用是立即终止方法。发生的事情是:您的方法没有完全运行,而是过早终止。尝试并按照您的方法流程;在第一次迭代后立即终止整个方法(使用return语句);所以它永远不会实际检查剩余的字符。更好的方法是这样做:
public static boolean hasValidDigits(String nameAccount){
for(int i = 0; i < nameAccount.length(); i++){
if(!(Character.isDigit(nameAccount.charAt(i)))){
return false;
}
}
return true;
}
这样,当循环时,程序立即遇到一个不是数字的字符,整个方法被中止并返回false。但是,如果未检测到非数字,则表示字符串包含所有数字,因此返回true。
它实际上是合乎逻辑的:
检查非数字... 立即检测到一个,中止并返回false ... 如果迭代完成且仍然没有非数字,则返回true!
我希望这有帮助!
快乐编码!!!
答案 2 :(得分:0)
您的方法需要额外的return语句来涵盖所有可能的执行路径。我们假设您的用户输入一个空字符串作为其用户名。你的循环体不会被执行。
这就是Java要求额外退货声明的原因。