添加新值时,将重置Java ArrayList值

时间:2011-12-27 23:15:47

标签: java arrays arraylist

因此,每次运行方法测试时,我的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 个答案:

答案 0 :(得分:6)

您只创建一个lyricLineInfo。它不应该是一个字段,而是在getInfo()方法中创建的局部变量。

也就是说,删除行

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

并添加

String[] lyricLineInfo = new String[5];

作为getInfo()方法的第一行。

答案 1 :(得分:1)

您将数组的POINTER添加到数组列表中,而不是它的COPY。因此,当您更改数组时,它会更改您在数组列表中显示的内容。

尝试

public void test()
{
    String[] temp = new String[5];
    temp = getInfo();
    lyricLineNumber.add(temp);
}