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

Ral*_*lph 1 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));
   }
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Jon*_*eet 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];
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

有两个问题:

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

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

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