由于return语句,我无法理解这段代码无法编译

时间:2012-11-21 07:04:25

标签: java

import java.util.Scanner;
public class Test{
   public static int[] calculateFactors(int n){
      int[] array = new int[n];
      for(int i = 0; i<=n;i++){
         if(n%i==0){
            return array[i];
         }
      }
   }

   public static void main(String[] args){
      System.out.println("Please enter the number you want to find the factors for:");
      Scanner input = new Scanner(System.in);
      int n = input.nextInt();
      System.out.println(calculateFactors(n));
   }
}

我不明白为什么会收到错误。我正在尝试编写用户输入数字的代码,程序将返回此数字的所有因子。 任何人都可以告诉我为什么当我无法使用相应的i因子返回数组时。

谢谢

4 个答案:

答案 0 :(得分:12)

查看您的代码(为了清晰起见,添加了空格):

public static int[] calculateFactors(int n) {
    int[] array = new int[n];
    for(int i = 0; i <= n; i++) {
        if(n % i == 0) {
            return array[i];
        }
    }
}

有两个问题:

  • 您的return语句与声明的返回类型不匹配。您尝试返回int,但您的方法声明它返回int[]
  • 由于您的方法无效,方法的结尾必须无法访问...您通过任何可能的路径返回值。您的代码不是这种情况。如果n为-1,会发生什么?它永远不会经历循环,所以它永远不会返回。更一般地,编译器将假设(几乎)任何if条件可能为假。

现在,至于如何解决它 - 给定方法名称,听起来你真的想要返回所有因素......所以你不应该尽快回来我找到了第一个。我会在List<Integer>而不是数组中收集因子。将return语句转换为add调用,然后在循环结束时返回。哦,您可能希望以i为1而不是0 ...

开始循环

所有这些都是针对这个特殊问题的。更一般地说,您应该查看编译器提供给您的错误。他们应该为您自己提供所需的所有信息。既然您了解问题,请再次阅读这些消息并尝试找出阻止您理解之前的消息。你能自己解决一下,还是错过了一些重要的概念?

答案 1 :(得分:2)

在到达循环结束时返回

答案 2 :(得分:1)

两个错误 第一:

for(int i = 0; i<=n;i++){

应该是

for(int i = 0; i<n;i++){

第二

 for(int i = 0; i<=n;i++){
  if(n%i==0){
    return array[i];
  }
}

应该是

for(int i = 0; i<=n;i++){
    if(n%i==0){
       return array[i];
    }
 }
return something

答案 3 :(得分:0)

问题在于声明:

 return array[i];

这是无效的,因为你试图返回数组的索引,这是一个int,你的方法签名返回int []改为this

 return array;