2017-04-09 48 views
3

对于我正在做的项目,我想使用单独的类来将各种人的信息存储在数组列表中。在这种情况下,该方法将包含字符串的ArrayList以存储我的所有信息。当我尝试这样做时,我意识到每当我运行storage向arraylist添加一个字符串时,它就会摆脱arraylist中的所有以前的信息。如何在java中使用方法存储来自数组列表的信息


是有可能使它所以两个字符串Hello, How Are You?I'm fine. How Are You?添加到two类阵列无需一旦该方法被重新运行阵列复位?

​​

给定输出:

[Hello, How Are You?] [I'm fine. How Are You?]

预期输出:

[Hello, How Are You?] [Hello, How Are You?, I'm fine. How Are You?]

+0

你需要初始化你的方法之外的数组列表,但你为什么即使初始化对象,如果你需要的只是静态方法 –

+0

提示:阅读有关Java命名约定。类去UpperCase。除此之外:这是非常基本的东西;可能在*任何有关这个主题的书中解释。 – GhostCat

回答

2

有解决你的问题两个选项:

宾得N(1):您当前ArrayList范围是本地storage方法,因为你是在每次调用创建一个全新newArrayList(以storage()方法),但你需要的是如下图所示,在类级别staticArrayList对象,但是因为你使用一个对象调用storage()方法,所以这不是可取的选择(清楚地说明如下),并且编译器已经发出警告并且你忽略了它。

public class two { 

    private static ArrayList<String> al = new ArrayList<String>(); 

    public static void storage(String toBeAdded) 
    { 
     al.add(toBeAdded); 
     System.out.println(al); 
    } 
} 

选项(2)(首选此):删除static范围和申报ArrayList<String>作为如下所示的实例变量(喜欢此选项),因为使用的是一个对象的引用是调用一个static方法不是必需的,并造成混乱。

public class two { 

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

     public void storage(String toBeAdded) 
     { 
      al.add(toBeAdded); 
      System.out.println(al); 
     } 
    } 

始终确保static变量/方法被调用使用类名(如Two.storage()),而不因为它们是类级别成员即,它们不是用于单个对象创建任何对象。我强烈建议你阅读this并更清楚地理解这个主题。


除上述重要的一点,始终确保你跟随像类名的Java 命名标准应该大写,你违反了开始。

+0

甚至更​​好,从代码中删除所有出现的'static'。 – Bohemian

+0

谢谢你,你是对的 – developer

2

不是将ArrayList声明为局部变量,而是将其用作字段。也使该方法非静态

public class two 
{ 

    private ArrayList<String> al = new ArrayList<String>(); 
    public void storage(String toBeAdded) 
    { 

     al.add(toBeAdded); 
     System.out.println(al); 
    } 
} 
1

你的错误

每次你调用storage()方法,你正在创建“的ArrayList”的新对象。

解决方案

因此,请two类的对象和方法传递非常久远的字符串的方法storage()

import java.util.ArrayList; 
    public class one 
    { 
     public static void main (String [] args) 
     { 
      two t = new two(); 

      t.storage(t,"Hello, How Are You?"); 
      t.storage(t,"I'm fine. How Are You?"); 
     } 
    } 

    class two 
    { 
     ArrayList<String> al = new ArrayList<String>(); 
     public static void storage(two object,String toBeAdded) 
     { 


      object.al.add(toBeAdded); 
      System.out.println(object.al); 
     } 
    } 
0

two类问题storage你的逻辑ISN” t每当你调用存储来保存新字符串时,你都会创建新的阵列列表al,这将删除旧列阵列表中的所有先前信息。

,以解决两个类中定义static ArrayList和通过方法存储将它添加信息:

public class two 
{ 
    public static ArrayList<String> al = new ArrayList<String>(); 

    public void storage(String toBeAdded) 
    { 
     al.add(toBeAdded); 
     System.out.println(al); 
    } 
} 

注意:也storage方法不应该是static方法,因为你正在创建two类对象并通过此对象调用方法,所以如果您尝试测试它会给您警告:

访问静态方法存储

警告您尝试访问类two的对象t中的静态方法storage的原因。

在声明中类的静态方法,以正确的方式来调用它:

ClassName.MethodName() 

在你的榜样:

two.storage("Hello, How Are You?"); 
two.storage("I'm fine. How Are You?"); 
相关问题