3

我在将数组列表转换为 java 中的数组时遇到了一些麻烦。

我有一个名为 Table 的类,它包含一个名为的数组列表applicants,它采用字符串。当我使用我的toArray()函数时,它似乎没有将数组列表转换为数组。

我知道这一点,因为当我运行 listArray() 函数时,它会给出错误:

java.lang.NullPointerException.

这是代码。任何帮助将不胜感激。

public class Table {
    public ArrayList<String> applicants;
    public String appArray[];

    public Table() {
        applicants = new ArrayList<String>();
    }

    public void addApplicant(String app) {
        applicants.add(app);
    }

    public void toArray() {
        int x = applicants.size();
        String[] appArray = new String[x];
        appArray = applicants.toArray(appArray);
    }

    public void list() {
        for (int i = 0; i < applicants.size(); i++) {
            System.out.println(applicants.get(i));
        }
    }

    public void listArray() {
        for (int i = appArray.length; i > 0; i--) {
            System.out.println(appArray[i]);
        }
    }
}
4

3 回答 3

16

这是因为您appArray在此处的方法中隐藏了该字段:

 int x = applicants.size();
 String[] appArray = new String[x];
 appArray = applicants.toArray(appArray);

appArray当您应该使用appArray已在类中声明的字段时,您将创建一个新的局部变量。

你应该做

public void toArray()
{
    appArray = applicants.toArray(new String[0]);
}
于 2013-02-19T20:19:51.227 回答
1
appArray = new String[applicants.size()];
int index = 0;
for(String app:applicants){
    appArray [index] = app;
    index++;
}
于 2013-02-19T20:37:37.667 回答
1

因为您的 ArrayList 和 Array 都应该只有字符串,所以您可以这样做。

appArray = applicants.toArray(new String[0]);

javadoc中的更多信息。

于 2014-03-14T07:53:01.863 回答