【问题标题】:Java loop in a method asks for extra return statement [duplicate]方法中的Java循环要求额外的return语句[重复]
【发布时间】:2018-05-24 10:54:01
【问题描述】:

我正在尝试编写一个包含 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 语句(只是为了让代码工作)布尔值似乎工作只有字符串中的起始数字(将数字更改为另一个字符返回 false),但如果我沿字符串进一步更改任何其他数字,即使它应该输出 false,它仍然返回 true。

在这方面的任何帮助或朝着正确方向的推动将是一个很大的帮助。

【问题讨论】:

  • 好吧,如果 nameAccount.length() 是 1 或 0,你的循环永远不会被迭代。在这种情况下,你的方法应该返回什么?你会把return 语句放在哪里,告诉编译器在这种情况下方法应该返回什么?
  • 请记住,如果您的循环被输入,它只会为这两种情况检查一个char 并立即返回。
  • 确实如此。此方法在第一次检查后停止,因此它只检查第二个数字。可能不是你想要的。

标签: java loops return boolean


【解决方案1】:

考虑重写方法以便只有一个返回语句。在这种情况下,调试并不难,但如果您有 30 个执行路径,如 Matheus 所述,则可能会非常棘手。您也可以考虑在此处使用正则表达式。由于您的代码目前是,不会检查所有数字。

您可以在https://regex101.com/ 尝试正则表达式

那时你的方法体可能是这样的

return yourString.matches(".\\d{5}");

【讨论】:

    【解决方案2】:

    您的方法实际上按预期运行。 return 语句的作用是立即终止方法。发生的事情是:您的方法没有完全运行,它被提前终止。尝试并遵循您的方法流程;第一次迭代后,整个方法立即终止(使用 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。

    其实是合乎逻辑的:

    检查非数字... 立即检测到一个,中止并返回错误... 如果迭代完成,仍然没有非数字,返回true!

    我希望这会有所帮助!

    编码愉快!!!

    【讨论】:

    • Taslim 成功了,非常感谢。也感谢其他所有人的意见。
    • 从 1 或 0 开始?
    • @Gholamali-Irani,我没看到……谢谢!
    【解决方案3】:

    您的方法需要一个额外的 return 语句来涵盖所有可能的执行路径。假设您的用户输入了一个空字符串作为其用户名。你的循环体不会被执行。

    这就是 Java 需要额外的 return 语句的原因。

    【讨论】:

      猜你喜欢
      • 2013-06-04
      • 2014-09-30
      • 2015-05-14
      • 2018-05-21
      • 1970-01-01
      • 2021-12-28
      • 2011-08-17
      • 2014-08-28
      相关资源
      最近更新 更多