在这个程序里。
首先建立了一个数组(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,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("");
}
}
解决方案 »
- 无限制的通配符List<?>
- A question about displaying image in JTable cell
- 有挑战的一道试题
- 最近工作遇到一个文件拷贝问题,请各位牛人帮忙,急!
- 请问在java中,一个类可以调用另一个类的什么?多谢!
- 请教如何自动下载网页内容,并写进数据库
- 在已存在的一个jcomponent中动态地加入一个控件(比如jbutton),如何让它立即显示啊?
- 高手帮我写一段简单的Socket客户端代码 100分
- 什么叫属性文件?
- hetbeans数据库开发
- 关于printwriter不同的构造方法问题
- java如何实现两台计算机之间文件夹同步更新 菜鸟提问各位高手帮忙不胜感激
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++;
}
}