Hello只有几个小时的Java。 (来自Python) 我试图定义一个多维数组并用“add”方法填充它。但是,我看到了一些奇怪的结果:
List<String[]> DrawInstructions = new ArrayList<String[]>();
String[] pair = {"",""};
pair[0]="UW";
pair[1]="100";
DrawInstructions.add(pair);
pair[0]="UM";
pair[1]="10";
DrawInstructions.add(pair);
pair[0]="UT";
pair[1]="50";
DrawInstructions.add(pair)
我预计DrawInstructions会以此结束:
[( “UW,” 100 “),(” UM”, “10”),( “UT”, “50”)]
但相反,我得到了:
[( “UT”, “50”),( “UT”, “50”),( “UT”, “50”)]
我确信这是非常基本但我无法弄明白,我已经搜索了几个小时。谢谢你的任何建议。
答案 0 :(得分:3)
问题是,你一遍又一遍地改变同一个数组 - .add()
不会为你创建副本。请尝试以下方法:
List<String[]> DrawInstructions = null;
String[] pair = {"",""};
pair[0]="UW";
pair[1]="100";
DrawInstructions.add(pair);
pair = new String[] {"",""};
pair[0]="UM";
pair[1]="10";
DrawInstructions.add(pair);
pair = new String[] {"",""};
pair[0]="UT";
pair[1]="50";
DrawInstructions.add(pair);
或者,更好的是,
List<String[]> drawInstructions = new ArrayList<String[]>();
drawInstructions.add(new String[] {"UW", "100"});
drawInstructions.add(new String[] {"UM", "10"});
drawInstructions.add(new String[] {"UT", "50"});
更接近Java命名标准,避免NPE,最小化本地状态,并且可以说更具可读性。
答案 1 :(得分:2)
您要添加相同的数组(对)三次。你所做的只是改变它的价值(内容)。 请记住,java对引用进行操作,而不是对象的副本。
尝试创建pair1,pair2,pair3。
答案 2 :(得分:1)
您只定义了一个String[] pair = {"",""};
您编辑了同一个对象3次并将其添加到列表中。 你可以这样做:
List<String[]> DrawInstructions = new ArrayList<String[]>();
String[] pair1 = {"",""};
pair1[0]="UW";
pair1[1]="100";
DrawInstructions.add(pair1);
String[] pair2 = {"",""};
pair2[0]="UW";
pair2[1]="100";
DrawInstructions.add(pair2);
....