Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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 为什么我需要多次创建数组?_Java - Fatal编程技术网

Java 为什么我需要多次创建数组?

Java 为什么我需要多次创建数组?,java,Java,此程序成对地洗牌源列表。原来的名单 “1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“10”、“11”、“12”、“13”、“14”、“15”、“16”、“17”、“18”、“19”、“20” 转移到 11^12 19^20 17^18 15^16 1^2 5^6 3^4 13^14 7^8 9^10 当注释行未注释时,上述情况属实。现在,如果注释了行A,则shuffleList中的所有元素都是19^20 public class ShuffleService { pu

此程序成对地洗牌源列表。原来的名单

“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“10”、“11”、“12”、“13”、“14”、“15”、“16”、“17”、“18”、“19”、“20”

转移到

11^12 19^20 17^18 15^16 1^2 5^6 3^4 13^14 7^8 9^10

当注释行未注释时,上述情况属实。现在,如果注释了行A,则shuffleList中的所有元素都是
19^20

public class ShuffleService {

public static void shuffleList(List<String> list) {

    System.out.println(list);

    ArrayList<String[]> shuffleList = new ArrayList<String[]>(10);
    String[] arr = new String[2];
    boolean flag = false;
    int step = 0;

    for(String s: list){

        if(flag){
            arr[1]=s;
        } else {
            arr[0]=s;
        }

        flag=!flag;
        step++;

        if(step==2){
            shuffleList.add(arr);
            step=0;
            //arr = new String[2]; //**line A**
        }
    }

    Collections.shuffle(shuffleList);

    for(String[] val: shuffleList){
        System.out.print(val[0]);
        System.out.print("^");
        System.out.println(val[1]);
    }


}

public static void main(String[] args) {
        String[] a = new String[]{"1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20"};
        List<String> list1 = Arrays.asList(a);
        shuffleList(list1);
    }
}
公共类ShuffleService{
公共静态无效随机列表(列表){
系统输出打印项次(列表);
ArrayList shuffleList=新的ArrayList(10);
字符串[]arr=新字符串[2];
布尔标志=假;
int步长=0;
用于(字符串s:列表){
国际单项体育联合会(旗){
arr[1]=s;
}否则{
arr[0]=s;
}
flag=!flag;
step++;
如果(步骤==2){
shufflist.add(arr);
步长=0;
//arr=新字符串[2];//**行A**
}
}
收藏。洗牌(洗牌列表);
for(字符串[]val:shuffleList){
系统输出打印(val[0]);
系统输出打印(“^”);
System.out.println(val[1]);
}
}
公共静态void main(字符串[]args){
字符串[]a=新字符串[]{“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”、“10”、“11”、“12”、“13”、“14”、“15”、“16”、“17”、“18”、“19”、“20”};
List list1=Arrays.asList(a);
沙弗利斯特(列表1);
}
}

那么,为什么我需要取消程序中A行的注释才能正常工作呢?

因为当您将值重写为arr(不重新创建)时,您还将修改列表中已有的值


向列表中添加对象不会阻止您对其进行修改,它不会自行复制。通过在循环中调用
new String[2]
,可以有效地为添加到列表中的每一对创建一个新的字符串数组,这正是您所需要的。

因为当您将值重写为
arr
(无需重新创建)时,您还将修改列表中已有的值


向列表中添加对象不会阻止您对其进行修改,它不会自行复制。通过在循环中调用
new String[2]
可以有效地为添加到列表中的每一对创建一个新的字符串数组,这正是您所需要的。

因为否则,您将通过引用修改一个对象(单数数组)的值。否则,您将修改一个对象(单数数组)的值参考。