【问题标题】:java for loop storing factorial in arrayjava for循环将阶乘存储在数组中
【发布时间】:2017-04-23 13:11:32
【问题描述】:

我正在尝试制作一个计算 1 到 5 的阶乘并将这些值存储在大小为 5 的数组中的程序

import java.util.*;
public class factorialArray
{
    public static void main(String [] args)
    {
        int factorialA[] = new int[5];
        for (int i=1; i<6; i++)
        {
            int factorial = 1;
            for(int j=1; j<=i; j++)
            {
                factorial = factorial *j;
            }
            factorial = factorialA[i];
        }
        System.out.println(factorialA[3]);
    }
}

如果我正确理解数组,我想打印出第三个第四个索引,即 factorialA[3]。但是我得到了 0。而且如果我有 int factorialA[]= new int[5] 我得到数组索引超出范围,我能得到一些帮助吗?

【问题讨论】:

  • 是的,谢谢,但是数组大小仍然是一个问题,尽管我不明白为什么数组大小为 5 中的 1 到 5 会给我带来越界错误@HighPerformanceMark
  • Java 数组索引从0 开始(在五元素数组中转到4
  • @andykim 运行循环直到i&lt;5。我也写了一个关于它的答案,和其他人一样

标签: java arrays for-loop


【解决方案1】:

首先,改变循环的条件

for (int i=1; i<6; i++)

for (int i=1; i<5; i++) // you could also do i=0

那么,这一行

factorial = factorialA[i];

这不会对您的数组进行任何更改。我想你打算这样做

factorialA[i] = factorial;

【讨论】:

  • 这只会计算高达 4 的阶乘
  • @QBrute 我们可以让数组更大,但是当我们使用i 来访问数组时,我认为我们不能做任何其他事情。
【解决方案2】:

小修正:

public static void main(String [] args) { 
    int factorialA[] = new int[5]; 
    for (int i=0; i<5; i++) { 
       int factorial = 1; 
       for(int j=1; j<=i+1; j++) { 
          factorial = factorial *j; 
       } 
      factorialA[i] = factorial; 
    } 
    System.out.println(factorialA[3]); 
}

这应该可以解决问题。

【讨论】:

  • 至少添加一些解释。
【解决方案3】:

下面的代码解决了这里的问题。赋值 factorial = factorialA[i] 没有帮助。您需要将阶乘值存储在数组中,在这种情况下将由 factorialA[i] = factorial 完成,并且还有一个索引问题,因为 Java 中的数组是基于 0 索引的。当你的代码运行时,我得到了 ArrayIndexOutOfBounds 异常。这是在下面的代码中修复的。希望这会有所帮助:-)

public static void main(String [] args)
{
    int factorialA[] = new int[5];
    for (int i = 0; i < 5; i++)
    {
        int factorial = 1;
        for(int j= 1; j <= i + 1; j++)
        {
            factorial = factorial * j;
        }
        factorialA[i] = factorial;
    }
    System.out.println(factorialA[3]);
}

【讨论】:

  • 这正是我想要的。我没想到给我加 1 谢谢
【解决方案4】:

我想打印出第三个第 4 个索引,如果 im 正确理解数组。但是我得到 0

当您使用int factorialA[] = new int[5] 创建一个int 数组时,数组元素将使用0 值进行初始化 这是它正在打印的内容,因为您没有将计算出的阶乘值分配给数组,所以你需要纠正它,如下所示:

factorialA[i] = factorial; //assign calculated value to the array element

另外,数组索引从0开始,所以把外循环改成:

for (int i=0; i<5; i++)

【讨论】:

  • 可能想补充一下ArrayIndexOutOfBounds 异常
【解决方案5】:

如果你想要阶乘到 n,那么首先要初始化长度为 n+1 的数组。假设你想要达到阶乘 [5],然后有大小为阶乘 [6] 的数组。由于数组索引从 0 开始上升到 n-1,其中 n 是数组的长度。

【讨论】:

  • int fact[] = new int[6];事实[0] = 1; for (int i=1;i
【解决方案6】:

您需要进行一些更改,这些更改会生成errors。我已经在代码中提到了它们。

在这里,您将 factorial of any number 存储在 indexarray 中。因此,如果您需要存储 factorials 仍然编号为 N 则您需要访问从 1-N 索引的 array-elements 所以您需要有 N+1 的数组大小。

你犯的另一个错误是factorial = factorialA[i];。所以在这里你根本不会操纵Array-Elements 的值,这会导致初始array 的所有元素都为0。所以需要把这里的赋值顺序改成factorialA[i] = factorial

import java.util.*;
public class factorialArray
{
    public static void main(String [] args)
    {
        int factorialA[] = new int[6];      //Array-Size=Maximum Number+1; so here 5+1=6.
        for (int i=1; i<6; i++)
        {
            int factorial = 1;
            for(int j=1; j<=i; j++)
            {
                factorial = factorial *j;
            }
            factorialA[i] = factorial; //Here assignment should be done to the element of array.
        }
        System.out.println(factorialA[3]);
    }
}

【讨论】:

    【解决方案7】:

    我猜你正在寻找这个

    public class factorialArray {
    
        public static void main(String[] args) {
            int arr[] = {1,2,3,4,5};
            for(int i=1;i<5;i++) {
                arr[i] = factorial(i); 
            }
    
            for(int i=1;i<5;i++) {
                System.out.println(arr[i]); 
            }
    
        }
    
        public static int factorial(int number){  
              int i,fact=1;  
    
              for(i=1;i<=number;i++){    
                  fact=fact*i;    
              }    
              return fact;   
             }  
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-06
      • 2022-08-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多