Значения Java ArrayList сбрасываются при добавлении новых значений в - PullRequest
0 голосов
/ 28 декабря 2011

Таким образом, каждый раз, когда я запускаю тест метода, мой массив String добавляется в мой ArrayList, и он выводит значение lyricLineInfo [4], но при повторном запуске теста метода массив будет добавлен в ArrayList, но этотакже заменит все остальные значения ArrayList новым массивом.Поэтому, когда lyricLineInfo [4] печатается снова, он печатает новое значение вместо старого значения, как это и должно быть.Я не уверен, почему это делает кто-нибудь может помочь?Вот мой код:

private String[] lyricLineInfo = new String[5];
private ArrayList<String[]> lyricLineNumber = new ArrayList<String[]>();

public void test() {
    lyricLineNumber.add(getInfo());
    System.out.println(lyricLineNumber.get(0)[4])
}

public String[] getInfo() {
    if (chckbxLeadSinger.isSelected()) {
        lyricLineInfo[0] = "true";
    } else {
        lyricLineInfo[0] = "false";
    }
    if (chckbxBackupSinger.isSelected()) {
        lyricLineInfo[1] = "true";
    } else {
        lyricLineInfo[1] = "false";
    }
    lyricLineInfo[2] = fieldStartTime.getText();
    lyricLineInfo[3] = fieldEndTime.getText();
    lyricLineInfo[4] = fieldLyrics.getText();
    return lyricLineInfo;
}

Ответы [ 2 ]

6 голосов
/ 28 декабря 2011

Вы создаете только один lyricLineInfo.Это должно быть не поле, а локальная переменная, созданная в методе getInfo().

То есть удалить строку

private String[] lyricLineInfo = new String[5];

и добавить

String[] lyricLineInfo = new String[5];

в качестве первой строки вашего getInfo() метода.

1 голос
/ 28 декабря 2011

Вы добавляете указатель к массиву в список массивов, а не его копию.Поэтому, когда вы изменяете массив, он меняет то, что вы видите в списке массивов.

Попробуйте

public void test()
{
    String[] temp = new String[5];
    temp = getInfo();
    lyricLineNumber.add(temp);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...