【问题标题】:Error when returning from a method using loops and if statements使用循环和 if 语句从方法返回时出错
【发布时间】:2016-03-14 05:28:45
【问题描述】:

我必须编写一个方法,该方法接受要查找的整数并返回找到的第一个匹配项的位置,如果在数组中没有找到,则返回 -1。这是我到目前为止所拥有的,但是,返回时出现错误,但我不知道自己做错了什么:

public static int findValue (int [] z, int y) //y is the number given by the user that I need to find.
{
    for (int x = 0; x < z.length ; x++) 
    {
        if ( z[x] == y)
        {
            int w = x;
            break;
            return (w);
        }
    }
    else 
        return -1;

}

【问题讨论】:

  • else 循环不能有 else 子句(在 java 中)...
  • 如果没有找到“y”我应该怎么做才能返回-1?
  • 只需删除else 并返回......还有为什么你在返回之前有一个break
  • break; 下方有无法访问的代码。
  • 我使用了 break 因为我只需要返回第一个匹配项。如果我不打破循环,它会不会继续下去,如果我不使用 else,仍然会返回 -1?对不起,我是初学者

标签: java loops if-statement methods


【解决方案1】:

1.) else block 用于if statement 而不是for-loop statement

2.) 当您从if 返回时,也不需要break; 语句

3.) 也不需要赋值,额外的变量int w = x;,只需return x就足够了。

public static int findValue (int [] z, int y) //y is the number given by the user that I need to find.
    {
        for (int x = 0; x < z.length ; x++) 
        {
            if ( z[x] == y)
            {
              return x;
            }
        } 
          return -1;
    }

【讨论】:

    【解决方案2】:

    你真的很接近解决这个问题:

    • 删除else - 循环后不需要else,因为循环后的代码在满足循环退出条件后立即到达。
    • 删除break - return 在没有额外的break 语句的情况下打破循环。

    就是这样 - 代码已准备就绪。作为风格要点,您可以删除w 的声明,并为您的if 语句的整个主体编写return x。不过,它会按原样工作。

    【讨论】:

      【解决方案3】:

      这段代码有几个问题。首先,你不能在break 语句之后有一个returnreturn 语句无法访问。只需摆脱break。编辑(回应 OP 的评论):重要的是要意识到当 return 语句执行时,它会立即终止循环(以及整个方法)。该方法中没有其他代码将运行。*

      其次,如果没有匹配的if,你就不能拥有else,而这里你不需要一个。如果你走到那一步,那是因为循环结束时没有执行return——这意味着找不到该值。所以只需返回 -1。

      另外,就风格而言,您不需要w 变量;返回x 也可以。将它们放在一起,结果可能如下所示:

      public static int findValue (int [] z, int y)
      {
          for (int x = 0; x < z.length ; x++) 
          {
              if ( z[x] == y)
              {
                  return x;
              }
          }
          return -1;
      }
      

      *这并不总是正确的。如果return 在还具有关联finally 块的trycatch 块内执行,则finally 块中的代码将在return 语句完成后执行。

      【讨论】:

        猜你喜欢
        • 2015-01-15
        • 1970-01-01
        • 2015-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-14
        • 2016-07-23
        • 1970-01-01
        相关资源
        最近更新 更多