Добавление элемента в многомерный ArrayList - PullRequest
0 голосов
/ 02 января 2012

Здравствуйте, только несколько часов с Java.(из Python) Я пытаюсь определить многомерный массив и заполнить его методом «добавить».Тем не менее, я вижу некоторые странные результаты:

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")]

Я уверен, что это довольно элементарно, но я не могу понять, я искал пару часов. Спасибо за любой совет.

Ответы [ 3 ]

3 голосов
/ 02 января 2012

Проблема в том, что вы меняете один и тот же массив снова и снова - .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, минимизировать локальное состояние и быть, возможно, более читабельным.1008 *

2 голосов
/ 02 января 2012

Вы добавляете один и тот же массив (пару) три раза. Все, что вы делаете, это меняете его значение (содержание). Помните, что Java работает с ссылками, а не с копиями объектов.

Попробуйте создать пару1, пару2, пару3.

1 голос
/ 02 января 2012

Вы определили только один 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); 
....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...