gpt4 book ai didi

java - 如何创建动态二维数组并在其中存储打乱数组

转载 作者:行者123 更新时间:2023-11-30 01:59:29 25 4
gpt4 key购买 nike

我创建了一个 2D 数组列表,它具有固定的行数和一个包含数字 1-4 的数组。我应该对数组进行洗牌,然后将该数组存储在数组列表中。但是,当我之后打印整个数组列表时,它不匹配,而且它似乎正在进行最后一次洗牌并打印所有行。

例如,我的输出之一是:

3、2、1、4

1、2、4、3

2、1、3、4

2、3、4、1

<小时/>

2、3、4、1

2、3、4、1

2、3、4、1

2、3、4、1

有人可以帮助我理解我的错误吗?

package practice;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Arrays;
import java.util.List;

public class Practice {
public static void main(String[] args) {
//Make arraylist for teams
List < Integer[] > teamMatches = new ArrayList < > ();
//Array for team numbers
Integer[] teamNums = new Integer[] {
1,
2,
3,
4
};

for (int i = 0; i < 4; i++) {
//shuffle array
Collections.shuffle(Arrays.asList(teamNums));
//add array to arraylist
teamMatches.add(teamNums);
//print out
System.out.println(teamMatches.get(i)[0] + ", " + teamMatches.get(i)[1] + ", " +
teamMatches.get(i)[2] + ", " + teamMatches.get(i)[3]);

}
System.out.println("_____________________________");
//print out entire match array
for (int n = 0; n < 4; n++) {

System.out.println(teamMatches.get(n)[0] + ", " + teamMatches.get(n)[1] + ", " +
teamMatches.get(n)[2] + ", " + teamMatches.get(n)[3]);




}



}

最佳答案

当您将 teamNums 添加到 teamMatches 时,您正在将引用(指针)传递到同一数组(同一内存位置)。因此,当您在 for 循环之后打印时,您只会得到最后一个已知的随机播放,因为这就是数组的样子。

您必须为 for 循环的每次迭代声明一个新的数组变量。尝试:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Arrays;
import java.util.List;

public class Practice {
public static void main(String[] args) {
//Make arraylist for teams
List < Integer[] > teamMatches = new ArrayList < > ();

for (int i = 0; i < 4; i++) {
// *create new Array for team numbers
Integer[] teamNums = new Integer[] {1, 2, 3, 4};

//shuffle array
Collections.shuffle(Arrays.asList(teamNums));

//add array to arraylist
teamMatches.add(teamNums);

//print out
System.out.println(
teamMatches.get(i)[0] + ", "
+ teamMatches.get(i)[1] + ", "
+ teamMatches.get(i)[2] + ", "
+ teamMatches.get(i)[3]
);
}
System.out.println("_____________________________");

//print out entire match array
for (int n = 0; n < 4; n++) {
System.out.println(
teamMatches.get(n)[0] + ", "
+ teamMatches.get(n)[1] + ", "
+ teamMatches.get(n)[2] + ", "
+ teamMatches.get(n)[3]);
}
}
}

关于java - 如何创建动态二维数组并在其中存储打乱数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53347791/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com