【问题标题】:value never used/ missing return statement从未使用过的值/缺少返回语句
【发布时间】:2015-10-22 08:22:49
【问题描述】:

我正在做一个练习,我必须编写一个方法来返回数组中最大元素的索引。

代码是这样的:

import java.util.Scanner;

public class IndexLargestElement {
  public static void main(String[] args) {

     Scanner input = new Scanner(System.in);
     System.out.println("Enter 10 double values");

     double[] list = new double [10];
     for (int i = 0; i < list.length; i++)
       list[i] = input.nextDouble();

     int index = indexOfLargestElement(list);

     System.out.println("The index of the largest element is " + index);
  }    

  public static int indexOfLargestElement(double[] array){
    double max = array[0];
    int index = 0;
    for (int i = 1; i < array.length; i++) {
      if (array[i] > max) {
        max = array[i];
        index = i;
        return index;
      }
    }
}

现在 int index=0;和 max = 数组 [i]; Netbeans 告诉我:这个值从未使用过。为什么?我不明白我做错了什么?应该是带牙套的吧?当我尝试运行时,它给出了一个编译错误,说没有返回语句。

我们总是感谢您的帮助!在此先感谢:)

【问题讨论】:

  • 括号未更正放置,您似乎错过了函数 indexOfLargestElement 中的一个。顺便说一句,我想在循环内返回一些东西在学术上是不正确的,但我再次猜想这与括号问题有关
  • 其实在这里你只想return i,然后你声明int index = 0;。如果你只想return i,为什么还需要index
  • 嘿,感谢您的回答!我不确定我是否真的明白你的意思:) 我到底在哪里忘记了括号?对不起我的菜鸟,整个街区的事情对我来说还是有点模糊。
  • 我之前尝试过,只返回没有索引变量的 i。我仍然在 max=array[i]; 处得到值从未使用过的错误,所以我检查了我的教科书,在那个例子中,他们还为索引创建了一个变量,所以我想我可以尝试一下,但似乎无济于事。跨度>

标签: java return


【解决方案1】:

看看你的indexOfLargestElement()。这是它的简化版:

for(.....) {
   if(condition) {
      return something;
   } 
}

这意味着只有在其中一个循环迭代条件为true 时,该方法才会返回值。但如果不是呢?您必须确保声明为返回值的方法在所有情况下都能做到。

在您的情况下,您必须决定如果条件始终为假,您应该怎么做。 您可以返回某种默认值或抛出异常。在方法结束时执行:

int indexOfLargestElement() {
    for(.....) {
       if(condition) {
          return something;
       } 
    }
    // RETURN
    return SOME_DEFAULT;
    // OR, alternatively throw exception:
    // throw new IllegalArgumentException("Some text");

}

【讨论】:

  • 如果我尝试这个,我仍然会得到同样的错误,因为 max = array[i] variable is never used.
  • 谢谢我知道了!我确实需要索引变量,然后我可以将返回索引放在循环之外!
【解决方案2】:

您将“返回索引”放在 if 语句中,这使得不确定返回是否会 100% 发生(这是您得到的警告),只需将“返回索引”移到循环和 if 语句之后。

【讨论】:

  • 如果我尝试这个,它说在返回 i 时找不到符号;
  • 谢谢!确实使用 index 变量,并在循环后返回 index !循环后返回 i 不起作用。感谢您的帮助!
  • 在你的情况下,“i”只存在于 for 循环中,这就是为什么它在循环之后找不到它。
【解决方案3】:
public static int indexOfLargestElement(double[] array){
    double max = array[0];
    int index = 0;
    for (int i = 1; i < array.length; i++) {
      if (array[i] > max) {
        max = array[i];
        index = i;
      }
    }
    return index;

由于您不想在检查所有元素之前返回,因此如果进入 if 则永远不会使用 max。

【讨论】:

  • 谢谢!我明白了 :) 由于其他答案,我正在摆弄删除索引变量,但是当我保留索引变量并将 return 放在循环之外时它可以工作:) 再次感谢!!
  • 如果有足够的帮助,请点赞/标记答案:)
【解决方案4】:

“返回索引”这一行应该在 for 循环之外。

public class IndexLargestElement {
public static void main(String[] args) {

 Scanner input = new Scanner(System.in);
 System.out.println("Enter 10 double values");

 double[] list = new double [10];
 for (int i = 0; i < list.length; i++)
   list[i] = input.nextDouble();

 int index = indexOfLargestElement(list);

 System.out.println("The index of the largest element is " + index);
}    

 public static int indexOfLargestElement(double[] array){
double max = array[0];
int index = 0;
for (int i = 1; i < array.length; i++) {
  if (array[i] > max) {
    max = array[i];
    index = i;

  }
}
return index;
}

【讨论】:

  • 谢谢!知道了!循环外的 return 语句确实成功了 :) 再次感谢!
  • 欢迎您!很高兴提供帮助:)
猜你喜欢
  • 2013-11-30
  • 2017-01-26
  • 2017-09-21
  • 2021-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-21
  • 1970-01-01
相关资源
最近更新 更多