Java 打印阵列堆栈
在函数Java 打印阵列堆栈,java,Java,在函数fillStackWithArray()中对数组执行一些操作,操作完成后,数组被推入堆栈并再次重复 但是当我试图打印堆栈时,问题就出现了。它给了我错误的答案 输出: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 预期产出: 5 5 5 5 5 4 4 4 4 4 3 3 3 3 3 2 2 2 2 2 1 1 1 1
fillStackWithArray()
中对数组执行一些操作,操作完成后,数组被推入堆栈并再次重复
但是当我试图打印堆栈时,问题就出现了。它给了我错误的答案
输出:
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
预期产出:
5 5 5 5 5
4 4 4 4 4
3 3 3 3 3
2 2 2 2 2
1 1 1 1 1
5 5 5 5 5
4 4 4 4 4
3 3 3 3 3
2 2 2 2 2
1 1 1 1 1
代码:
import java.util.Stack;
公共类ArraysOnStack{
公共静态void main(字符串[]args){
int-sizeOfArray=5;
堆栈=fillStackWithArray(5);
打印堆栈(stack);
}
专用静态void打印堆栈(堆栈){
而(!stack.empty()){
int[]arr=stack.pop();
对于(int i=0;i
PS:操作是随机的,只是为了填充数组。但我的问题与这种情况有关。您在fillStackWithArray的堆栈中推送相同的
int[]
。Java中的int数组是Object的子类,因此它是Object类型。在循环内创建int[]
数组
for (int i = 0; i < size; i++) {
int[] arr = new int[size];
...
}
for(int i=0;i
您正在fillStackWithArray的堆栈中推送相同的int[]
。Java中的int数组是Object的子类,因此它是Object类型。在循环内创建int[]
数组
for (int i = 0; i < size; i++) {
int[] arr = new int[size];
...
}
for(int i=0;i
int[]
在循环外部初始化。同一数组在后续迭代中更新。您需要在循环中声明int[]
数组
i
的值应从1到i开始
推送到堆栈上的int[]
在循环外部初始化。同一数组在后续迭代中更新。您需要在循环中声明int[]
数组
在fillStackWithArray()
函数中,分配给变量i
的值应从1到i开始。您已经创建了一个数组arr
,并且在每次迭代中都要更改相同的arr
。
要解决此问题,请为外部循环的每个迭代创建一个新数组。
要理解这个问题,请阅读有关深度复制和按引用传递的内容。在fillStackWithArray()
函数中,您创建了一个数组arr
,并且在每次迭代中都更改相同的arr
。
要解决此问题,请为外部循环的每个迭代创建一个新数组。
要理解这个问题,请阅读关于深度复制和引用传递的内容。试试这个
private static Stack<int[]> fillStackWithArray (int size) {
Stack<int[]> stack = new Stack<>();
int[] arr = new int[size];
// Some Operation that fills Stack with Arrays.
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
arr[j] = i + 1; // changed
}
// Pushing the array into stack on which some operation
// is performed.
stack.push(arr.clone()); // changed
}
return stack;
}
试试这个
private static Stack<int[]> fillStackWithArray (int size) {
Stack<int[]> stack = new Stack<>();
int[] arr = new int[size];
// Some Operation that fills Stack with Arrays.
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
arr[j] = i + 1; // changed
}
// Pushing the array into stack on which some operation
// is performed.
stack.push(arr.clone()); // changed
}
return stack;
}
请阅读:我尝试过调试。您正在编辑相同的数组。将数组初始化移到循环的第一个中。请阅读:我确实尝试过调试。您正在编辑同一个数组。将数组初始化移动到循环的第一个中。您还可以解释为什么使用arr.clone()
:)您还可以解释为什么使用arr.clone()
:)
5 5 5 5 5
4 4 4 4 4
3 3 3 3 3
2 2 2 2 2
1 1 1 1 1