如何创建一个返回ArrayList的方法

问题描述:

从阅读教程和练习Java,我遇到了一个问题。我创建了一个String ArrayList,并在其中添加了字符串。不过,我想要一个方法,它允许我添加更多的字符串到这个arrayList和另一个允许我显示这个arrayList的方法。下面是我试图解决这个问题。我的代码只打印一个空数组列表如何创建一个返回ArrayList的方法

class apples { 
    public static void main(String[] args) { 
     viewArrayList(); //prints a empty arraylist 
    } 

    public static void addString() { 
     ArrayList<String> destinationArray = new ArrayList<String>(); 
     destinationArray.add("example1"); 
     destinationArray.add("example2"); 
    } 

    static ArrayList GetArrayList() { 
     ArrayList<String> destinationArray = new ArrayList<String>(); 

     return destinationArray; 
    } 

    public static void viewArrayList() { 
     System.out.println(GetArrayList()); 
    } 
} 
+0

既然你正试图反复操作相同的列表,您将得到更好的服务在你的类中创建'List '属性,在你的构造函数中初始化它,然后创建方法来操作它(添加项目,删除项目,返回列表等)。您还应该删除您在代码中散布的静态修饰符。 – Perception 2013-03-26 17:34:28

创建ArrayList的对象,并通过参考不同的方法。示例在主类中创建一个ArrayList对象,并将其传递给addString & display方法。

public static void main(String[] args){ 
    List<String> destinationArray = new ArrayList<String>(); 
    viewArrayList(destinationArray); 
    displayArrayList(destinationArray);//prints a empty arraylist 
} 
public static void addString(List destinationArray){ 
    destinationArray.add("example1"); 
    destinationArray.add("example2"); 
} 
... 

我会做这样的事情:

class apples 
{ 
    private ArrayList<String> array = new ArrayList<String>(); 

    public void addString(String addString) 
    { 
    this.array.add(addString); 
    } 


    public ArrayList<String> GetArrayList() 
    { 
    return array; 
    } 
} 

你没忘了添加addString()来getArrayList()?

您的变量destinationArray在方法中声明,它表明它只存在于此方法内addString()以外的对象不再存在,并且您无法在其他方法中访问它。要做到这一点,你必须把它声明为类变量,这样的:

class apples{ 
ArrayList<String> destinationArray = new ArrayList<String>(); 
public static void main(String[] args) 

当执行你的程序,其实它执行的主要方法,因此,如果你想执行你的方法addString()你将有在主函数中调用它。它会看起来像这样:

public static void main(String[] args) 
{ 
    this.addString(); 
    this.viewArrayList(); //prints a empty arraylist 
} 

一个问题是,您使用每个方法不同的数组列表。每当您使用关键字new时,您正在创建一个新的(和空的)列表。

在你的类的顶部创建ArrayList的一次...

private ArrayList<String> myList = new ArrayList<String>(); 

然后参考myList中的所有其他方法没有分配给它一个新值。

public ArrayList<String> getArrayList() { 
    return myList; 
} 

public void addSomeStrings() { 
    myList.add("Some String"); 
    myList.add("Some Other String"); 
} 

并且不要害怕走过Java教程。这是一个基本的概念,如果你不支持你的基础,你可能会感到非常沮丧。

编译并运行下面的程序。

import java.util.ArrayList; 

class Apples { 
    static ArrayList<String> destinationArray = new ArrayList<String>(); 
    public static void main(String[] args) { 
     System.out.print("First time"); 
     viewArrayList(); 
     addString("Example1"); 
     addString("Example2"); 
     addString("Example3"); 

     System.out.print("Second time"); 
     viewArrayList(); 
     addString("Example4"); 
     addString("Example5"); 
     System.out.print("Third time"); 
     viewArrayList(); 
    } 

    public static void addString(String example) { 
     destinationArray.add(example); 
    } 

    static ArrayList getArrayList() { 
     return destinationArray; 
    } 

    public static void viewArrayList() { 
     System.out.println(getArrayList()); 
    } 
} 

数组对象的范围是这里的问题。您将字符串添加到1数组并尝试打印另一个数组。删除addString()中的静态块和数组声明。在这个类定义的旁边声明数组,

class apples {ArrayList destinationArray = new ArrayList(); .. ....

它应该工作。

代码:

public class Apples { 
public static void main(String[] args) { 
    viewArrayList(); //prints a empty arraylist 
} 

public static ArrayList<String> addString() { 
    ArrayList<String> destinationArray = new ArrayList<String>(); 
    destinationArray.add("example1"); 
    destinationArray.add("example2"); 
    return destinationArray; 
} 

public static ArrayList<String> GetArrayList() { 
    return addString();  
} 

public static void viewArrayList() { 
    System.out.println(GetArrayList()); 
} 

}

输出:

[例1,例2]