我希望在从递归返回后保留前一个值。 它适用于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);
}
}
答案 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-Disposition
为Header 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));