1
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

4 回答 4

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条件都可能为假。

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

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

于 2012-11-21T07:06:45.630 回答
2

到达循环结束时缺少返回

于 2012-11-21T07:05:26.623 回答
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
于 2012-11-21T07:10:48.607 回答
0

问题在于声明:

 return array[i];

这是无效的,因为您试图返回数组的索引,这是一个 int,您的方法签名正在返回 int[] 更改为此

 return array;
于 2012-11-21T07:07:38.653 回答