Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Pascal三角形递归程序不工作_Java_Arrays_Recursion - Fatal编程技术网

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

这是我的密码。。。我是一个初学者,非常感谢任何反馈。我试图解决的问题是将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 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是按值传递的。您可以尝试发送消息,但请注意,我没有时间在不客气,对不起。