[英]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 number
的factorial 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.