方法中的Java循环要求额外的返回语句

时间:2017-12-10 22:19:29

标签: java loops return boolean

我正在尝试编写一个包含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。

任何有关这方面的帮助或推动正确的方向都将是一个很大的帮助。

3 个答案:

答案 0 :(得分:2)

考虑重写方法,以便只有一个return语句。在这种情况下,调试并不困难,但如果您有Matheus提到的30个执行路径,那可能会非常棘手。你也可以考虑在这里使用正则表达式。正如您的代码当前所有,不会检查所有数字。

您可以在https://regex101.com/

尝试正则表达式

此时您的方法体可能类似于

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要求额外退货声明的原因。