Pascal 的三角代码在特定行后失败
Pascal's triangle code failing after certain row
import java.util.*;
public class PascalFinal
{
public static void main()
{
Scanner f = new Scanner(System.in);
System.out.print("How many rows of Pascal's triangle do you want to print: ");
int row = f.nextInt();
Pascal(row);
showPascal(Pascal(row));
}
public static void showPascal(int[][] Pascal)
{
for(int a = 0; a < Pascal.length; a++)
{
for(int b = 0; b < Pascal[a].length; b++)
{
System.out.print(Pascal[a][b] + " ");
}
System.out.println();
}
}
public static int[][] Pascal(int x)
{
int[][] Pascal = new int[x][];
int rowLength = 1;
for(int a = 0; a < x; a++)
{
Pascal[a] = new int[rowLength];
rowLength++;
}
for(int a = 0; a < Pascal.length; a++)
{
for(int b = 0; b < Pascal[a].length; b++)
{
int Piscal = a-b;
Pascal[a][b] = Factorial(a)/Factorial(b)/Factorial(Piscal);
}
}
return Pascal;
}
public static int Factorial(int n)
{
if (n < 0)
{
int x = -1;
return x;
}
if (n == 0)
{
int x = 1;
return x;
}
else
{
return (n * Factorial(n - 1));
}
}
当我 运行 该代码时,它在前 13 行中工作得很好,但是它随后开始为其余行输入奇怪的值。我的第一个想法是,这可能是由于阶乘方法的值太大,而 int 数据类型无法容纳它,但我不确定。不知道为什么这会变得一团糟。请帮忙。
编辑:我尝试使用 long 数据类型而不是 int,但是一旦超过 20 行就会出现同样的问题。
如果你要画的帕斯卡三角形是设计好的here
您不需要计算任何阶乘。
每一行都可以使用前一行进行简单求和...
您可以使用数组来完成。作为建议,从数组开始:[0, 1, 0]
请记住,可以对前一行的相邻数字求和来评估下一行。
您需要遍历 [0, 1, 0] 并创建 [0,1,1,0] 然后 [0,1,2,1,0]
如你所见,第一个是0并且始终为0,下一个是前两个的总和,依此类推...
import java.util.*;
public class PascalFinal
{
public static void main()
{
Scanner f = new Scanner(System.in);
System.out.print("How many rows of Pascal's triangle do you want to print: ");
int row = f.nextInt();
Pascal(row);
showPascal(Pascal(row));
}
public static void showPascal(int[][] Pascal)
{
for(int a = 0; a < Pascal.length; a++)
{
for(int b = 0; b < Pascal[a].length; b++)
{
System.out.print(Pascal[a][b] + " ");
}
System.out.println();
}
}
public static int[][] Pascal(int x)
{
int[][] Pascal = new int[x][];
int rowLength = 1;
for(int a = 0; a < x; a++)
{
Pascal[a] = new int[rowLength];
rowLength++;
}
for(int a = 0; a < Pascal.length; a++)
{
for(int b = 0; b < Pascal[a].length; b++)
{
int Piscal = a-b;
Pascal[a][b] = Factorial(a)/Factorial(b)/Factorial(Piscal);
}
}
return Pascal;
}
public static int Factorial(int n)
{
if (n < 0)
{
int x = -1;
return x;
}
if (n == 0)
{
int x = 1;
return x;
}
else
{
return (n * Factorial(n - 1));
}
}
当我 运行 该代码时,它在前 13 行中工作得很好,但是它随后开始为其余行输入奇怪的值。我的第一个想法是,这可能是由于阶乘方法的值太大,而 int 数据类型无法容纳它,但我不确定。不知道为什么这会变得一团糟。请帮忙。
编辑:我尝试使用 long 数据类型而不是 int,但是一旦超过 20 行就会出现同样的问题。
如果你要画的帕斯卡三角形是设计好的here 您不需要计算任何阶乘。
每一行都可以使用前一行进行简单求和...
您可以使用数组来完成。作为建议,从数组开始:[0, 1, 0] 请记住,可以对前一行的相邻数字求和来评估下一行。
您需要遍历 [0, 1, 0] 并创建 [0,1,1,0] 然后 [0,1,2,1,0]
如你所见,第一个是0并且始终为0,下一个是前两个的总和,依此类推...