繁体   English   中英

java 用于在数组中存储阶乘的循环

[英]java for loop storing factorial in array

我正在尝试制作一个程序来计算 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]);
    }
}

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

首先,改变循环的条件

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;

小修正:

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]); 
}

这应该可以解决问题。

这里的问题在下面的代码中解决了。 赋值factorial = factorialA [i]没有帮助。 您需要将factorial值存储在数组中,在这种情况下,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]);
}

我猜你在找这个

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;   
         }  
}

您需要做一些产生errors更改。我在代码中提到过它们。

在这里,您将在array index处存储factorial of any numberfactorial of any number 因此,如果您需要存储仍然为N factorials那么您需要访问从1-N索引的array-elements所以您需要具有N+1数组大小。

你犯的另一个错误是factorial = factorialA[i]; 所以在这里你根本不操纵Array-Elements值,这导致了所有元素为0的初始array 所以你需要在这里将赋值顺序更改为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]);
    }
}

我想打印出第三个第四个索引,即factorialA [3],如果我正确理解数组。 但是我得到0

当你使用int factorialA[] = new int[5]创建一个int数组时, 数组元素将被初始化为0 ,这就是它打印的原因,因为你没有将计算出的factorial值赋给数组,所以你需要更正如下所示:

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

此外,数组索引从0开始,因此将外部循环更改为:

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

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

public class Factorial {

 public static void main(String[] args) 
 {
        int arr[] = {1,2,3,4,5};
        for(int i=0;i<5;i++) {
            arr[i] = factorial(arr[i]); 
        }

        for(int i=0;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;   
   }  

}

@fairoz 几乎正确地回答了这个问题。 他们只是在阶乘 class 中传递了输入 i 而不是 arr[i],这将给出正确的答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM