数组在递归中不保留先前的值(JAVA)

时间:2018-05-10 03:06:00

标签: java recursion

我希望在从递归返回后保留前一个值。 它适用于COUNT,但是Array没有保留我想要的先前值。

  

结果是:

     递归前的

[0,0,0,0]计数:0

     递归前的

[0,1,0,0]计数:1

     在递归[0,1,2,0]之前

计数:2

     递归前的

[0,1,2,3]计数:3

     

递归后[0,1,2,3]计数:3

     

递归后[0,1,2,3]计数:2

     

递归后[0,1,2,3]计数:1

     

递归后[0,1,2,3]计数:0

     

但我想要的结果是:

     递归前的

[0,0,0,0]计数:0

     递归前的

[0,1,0,0]计数:1

     在递归[0,1,2,0]之前

计数:2

     递归前的

[0,1,2,3]计数:3

     

递归后[0,1,2,3]计数:3

     

递归后[0,1,2,0]计数:2

     

递归后[0,1,0,0]计数:1

     

递归后[0,0,0,0]计数:0

 import java.util.Arrays;

 import  java.util.Scanner;

 public class main {

     public static void boarder(int board[],int count)
     {

         if(count==4)
         {
             return;
         }
         board[count]=count;
         int temp=count+1;

         System.out.println("before recursion"+Arrays.toString(board)+"count: "+(count));
         boarder(board,temp);
         System.out.println("After recursion"+Arrays.toString(board)+"count: "+(count));

     }

     public static void main(String[] args)
     {
         int count=0;
         int board[]={0,0,0,0};
         //state tic=new state(board);
         boarder(board,0);
     }

 }

4 个答案:

答案 0 :(得分:1)

你应该像这样恢复以前的值。

public static void boarder(int board[], int count) {
    if (count == 4) {
        return;
    }
    int previous = board[count];
    board[count] = count;
    int temp = count + 1;
    System.out.println("before recursion" + Arrays.toString(board) + "count: " + (count));
    boarder(board, temp);
    System.out.println("After recursion" + Arrays.toString(board) + "count: " + (count));
    board[count] = previous;
}

结果

before recursion[0, 0, 0, 0]count: 0
before recursion[0, 1, 0, 0]count: 1
before recursion[0, 1, 2, 0]count: 2
before recursion[0, 1, 2, 3]count: 3
After recursion[0, 1, 2, 3]count: 3
After recursion[0, 1, 2, 0]count: 2
After recursion[0, 1, 0, 0]count: 1
After recursion[0, 0, 0, 0]count: 0

答案 1 :(得分:0)

您的代码按预期工作。

最终Content-DispositionHeader always set Content-Disposition "attachment"

你看到board[]字符串是相同的,因为它在递归完成后执行,当你的[0, 1, 2, 3]时它们都打印相同的字符串

答案 2 :(得分:0)

board是一个数组,它是一个对象,但count是一个原始变量。对于基元,值通过值传递,而对象通过引用传递值。因此,相同的对象(相同的内存位置)通过'board'的方法传递。因此,当您对“董事会”进行更改时,该更改将反映在所有“董事会”的地方。原始变量(在这种情况下为'count')的行为不是这样的。每次通过方法传递时都会创建一个新的内存位置。当您对传递的变量进行更改时,它不会更改原始变量。

答案 3 :(得分:0)

您需要阅读this

boarder功能更改为

board[count]=count;
int temp=count+1;
int[] tempArr = Arrays.copyOf(board, board.length);
System.out.println("before recursion"+Arrays.toString(board)+"count: "+(count));
boarder(tempArr,temp);
System.out.println("After recursion"+Arrays.toString(board)+"count: "+(count));