在这个程序里。
首先建立了一个数组(1,2,0,2,1,0)。
然后建立一个list,并将数组的非0元素加入list。于是list(1,2,2,1)我然后想把list中元素重新拷贝到数组的非0位置。按照我的想发,数组和list的内容本应不会有变化的。
可是却发现得到了这样一个输出,无论是数组还是list都改变了。
望大神们不吝赐教~程序如下:
/*
 * temp:
 * 1 2 2 1
 * bitmaps
 * 1 2 0 2 1 0
 * ---------changed--------
 * temp
 * 2 2 2 2
 * bitmaps
 * 1 1 0 1 1 0
 */import java.util.*;
import java.awt.*;public class MainTest{
public static void main(String[] args){
int[] bitmaps = new int[6];
bitmaps[0] = 1;
bitmaps[1] = 2;
bitmaps[2] = 0;
bitmaps[3] = 2;
bitmaps[4] = 1;
bitmaps[5] = 0; ArrayList<Integer> list = new ArrayList<Integer>();
for(int i=0;i<bitmaps.length;i++){
int index = 0;
if(bitmaps[i]!=0){
list.add(index,bitmaps[i]);
index++;
}
}

System.out.println("temp:");
for(int i=0;i<list.size();i++){
System.out.print(" "+list.get(i));
}
System.out.println("");

System.out.println("bitmaps");
for(int i=0;i<bitmaps.length;i++){
System.out.print(" "+bitmaps[i]);
}
System.out.println("");

System.out.println("---------changed--------");

System.out.println("temp");
for(int i=0;i<bitmaps.length;i++){
int j = 0;
if(bitmaps[i]!=0){
bitmaps[i] = list.get(j);
j++;
System.out.print(" "+list.get(j));
}
}
System.out.println("");

System.out.println("bitmaps");
for(int i=0;i<bitmaps.length;i++){
System.out.print(" "+bitmaps[i]);
}
System.out.println("");
}
}

解决方案 »

  1.   

    目测这段程序有Bug:        System.out.println("temp");
            for(int i=0;i<bitmaps.length;i++){
                int j = 0; // 放错位置
                if(bitmaps[i]!=0){
                    bitmaps[i] = list.get(j);
                    j++;
                    System.out.print(" "+list.get(j)); // 按理来说应该之前打印,不过问题不大
                }
            }问题在:int j=0,这行应该放到for之前,也就是说:
            System.out.println("temp");
            int j = 0; // 移动到这里
            for(int i=0;i<bitmaps.length;i++){
                if(bitmaps[i]!=0){
                    bitmaps[i] = list.get(j);
                    System.out.print(" "+list.get(j));
                    j++;
                }
            }