Java Pascal三角形递归程序不工作
这是我的密码。。。我是一个初学者,非常感谢任何反馈。我试图解决的问题是将pascal三角形打印到用户输入的行Java Pascal三角形递归程序不工作,java,arrays,recursion,Java,Arrays,Recursion,这是我的密码。。。我是一个初学者,非常感谢任何反馈。我试图解决的问题是将pascal三角形打印到用户输入的行 public class Pascal111 { int max; int r,c; public int pascal(int maxm){ max=maxm; for(int r=0; r<max; r++){ for (int c=0; c<r; c++){ populate();} } return max; }
public class Pascal111 {
int max;
int r,c;
public int pascal(int maxm){
max=maxm;
for(int r=0; r<max; r++){
for (int c=0; c<r; c++){
populate();}
}
return max;
}
public void populate(){
int[][] array=new int[max][max];
if (r==0){
array[0][0]=1;
}
else if(c==0){
array[0][0]=1;
}
else if(c==r){
array[r][c]=1;;
}
else
array[r][c]=(array[r-1]+array[c-1]+array[r-1]+array[c]);
}
}
这是错误的
array
是一个二维数组,因此array[X]
表示一个完整的行(一维数组)。您不能在一维数组上执行二进制操作,而将其放在单个元素上数组[r][c]
取而代之的是
array[r][c]=(array[r-1][c-1]+array[r-1][c]);
这是错误的
array
是一个二维数组,因此array[X]
表示一个完整的行(一维数组)。您不能在一维数组上执行二进制操作,而将其放在单个元素上数组[r][c]
取而代之的是
array[r][c]=(array[r-1][c-1]+array[r-1][c]);
虽然我没有仔细研究这个问题,但有一个错误很明显:有两个不同的变量名为
r
,还有两个不同的变量名为c
以下是代码的相关部分:
public class Pascal111 {
int r,c; // (A)
public int pascal(int maxm) {
for (int r=0; r<max; r++){ // (B)
for (int c=0; c<r; c++){ // (B)
populate();
}
}
return max;
}
public void populate() {
if (r==0) {
... more code that accesses r and c
}
}
后来:
public void populate(int r, int c) {
然后,当populate
指的是r
和c
时,它将指的是基本上是局部变量的参数。参数将是pascal
中的r
和c
。(但是pascal
变量和populate
参数不必使用相同的名称。)执行此操作后,您将发现不再需要实例变量。无论如何,将实例变量用作循环索引总是错误的,或者几乎总是错误的
类似的错误:在
populate
中,array
作为局部变量。这意味着您每次调用它来设置一个数组元素时,都在创建一个全新的数组。然后,当populate
返回时,array
将无法再访问,因此您所做的任何工作都将丢失 虽然我没有仔细研究这个问题,但有一个错误很明显:有两个不同的变量名为r
,还有两个不同的变量名为c
以下是代码的相关部分:
public class Pascal111 {
int r,c; // (A)
public int pascal(int maxm) {
for (int r=0; r<max; r++){ // (B)
for (int c=0; c<r; c++){ // (B)
populate();
}
}
return max;
}
public void populate() {
if (r==0) {
... more code that accesses r and c
}
}
后来:
public void populate(int r, int c) {
然后,当populate
指的是r
和c
时,它将指的是基本上是局部变量的参数。参数将是pascal
中的r
和c
。(但是pascal
变量和populate
参数不必使用相同的名称。)执行此操作后,您将发现不再需要实例变量。无论如何,将实例变量用作循环索引总是错误的,或者几乎总是错误的
类似的错误:在
populate
中,array
作为局部变量。这意味着您每次调用它来设置一个数组元素时,都在创建一个全新的数组。然后,当populate
返回时,array
将无法再访问,因此您所做的任何工作都将丢失 我知道这个密码在很多方面都被破坏了。。。如果你能跟我说实话,我很难理解递归!为什么你认为你的程序是递归的?我知道这段代码在很多方面都被破坏了。。。如果你能跟我说实话,我很难理解递归!为什么你认为你的程序是递归的?现在程序已经编译了,但是我得到了以下结果1如果(c==0){array[0][0]=1;到else如果(c==0){array[r][0]=1;
我做了调整,仍然得到了相同的输入!我也对r==0做了同样的调整现在程序编译了,但是我得到了以下结果1如果(c==0){array[0][0]=1,你还需要将else更改为else如果(c==0){array[r][0]=1;
我做了调整,但仍然得到了相同的输入!我也对r==0WOW做了相同的调整。这是迄今为止最好的答案。这现在是合理的。我以前看到过一个与你的答案类似的答案,但我无法理解。现在我完全明白了。PS你应该是一名教师!你介意我给你发邮件吗不时问一个关于我遇到的问题的快速问题?还有,在哪里可以将数组放置为变量,这样它就不会在每次调用填充时被擦除?关于最后一个问题:两个不错的选择。(1)将数组设置为实例变量,并在对象的构造函数中初始化它。(2)在pascal
方法中声明它,并将其作为参数传递给populate
。数组是一个引用,因此如果您执行最后一个操作,您仍然可以在populate
中修改它,即使Java是按值传递的。您可以尝试发送消息,但请注意,我没有时间在在态度上。抱歉。哇。这是迄今为止最好的答案。这现在是有意义的。我以前看到的答案与你的答案相似,但我无法理解。现在我完全明白了。PS你应该是一名教师!你介意我时不时地问你一个关于我遇到的问题的快速问题吗?还有,你会在哪里回答将数组放置为变量的好位置,这样它就不会在每次调用填充时被擦除?关于最后一个问题:两个不错的选择。(1)将数组设置为实例变量,并在对象的构造函数中初始化它。(2)在pascal
方法中声明它,并将其作为参数传递给populate
。数组是一个引用,因此如果您执行最后一个操作,您仍然可以在populate
中修改它,即使Java是按值传递的。您可以尝试发送消息,但请注意,我没有时间在不客气,对不起。