Java Collection无法正常工作,需要帮​​助

时间:2014-12-16 10:03:38

标签: java arraylist collections

我正在开始学习java的初学者项目。 该项目是添加,列表和删除人员。喜欢

键入1以添加人员 键入2列出所有人 键入3以删除一个人。

我正在使用ArrayList集合来处理这个项目。

第一个问题是使用收藏品是一个很好的方法吗? 如果是的话我将全局声明ArrayList,但在迭代它时,我可以看到它没有存储任何数据。

我的代码如下。

import java.util.*;  

public class OperationClass implements OperationInterface {  
    String id;  
    String fname;  
    String lname;  
    ArrayList<String> Person=new ArrayList<String>();  

    public static void main(String args[]) {  
        new OperationClass().operation();  
    }  

    public static void operation() {  
        int a;  
        Scanner in = new Scanner(System.in);  
        System.out.println("Enter 1 for Adding new Record");  
        System.out.println("Enter 2 to see List of Records");  
        System.out.println("Enter 3 to Delete a record");  
        System.out.println("Enter 4 to Exit!!");  

        a = in.nextInt();  

        if (a == 1) {  
            new OperationClass().addPerson();  
        } if (a == 2) {  
            new OperationClass().listPerson();  
        } if (a == 3) {  
            new OperationClass().deletePerson();  
        } if (a == 4) {  
            System.out.println("Thanks for using the program");  
        }  
    }  

    /** 
     * adds a new Person and stores in the collection 
     */  
    @Override  
    public void addPerson() {  


        Scanner in = new Scanner(System.in);  
new OperationClass().operation();  
        System.out.println("Enter a the id");  
        id = in.next();  

        System.out.println("Enter a the First Name");  
        fname = in.next();  

        System.out.println("Enter a the Last Name");  
        lname = in.next();  


        Person.add(id);  
        Person.add(fname);  
        Person.add(lname);  



        new OperationClass().operation();  
    }  

    @Override  
    public void listPerson() {  
        Iterator itr=Person.iterator();  
        while(itr.hasNext()){  
            System.out.println(itr.next());  
        }  
     new OperationClass().operation();  

    }  

    @Override  
    public void deletePerson() {  
        System.out.println("Delete under construction");  
    }  

    @Override  
    public void quit() {  

    }  
}  

第一个输出是

输入1以添加新记录。

输入2以查看记录列表。

输入3以删除记录。

输入4退出!!

输入1就像这样

输入1以添加新记录

输入2以查看记录列表

输入3以删除记录

输入4退出!!

1

输入ID

1

输入名字

Indranil

输入姓氏

Sinha

然后再次点击进入后,前四个选项即将到来,而在进入2后它没有显示任何内容。

输入1以添加新记录

输入2以查看记录列表

输入3以删除记录

输入4退出!!

1

输入ID

1

输入名字

asdasd

输入姓氏

dsffdgdfg

输入1以添加新记录

输入2以查看记录列表

输入3以删除记录

输入4退出!!

2

输入1以添加新记录

输入2以查看记录列表

输入3以删除记录

输入4退出!!

4 个答案:

答案 0 :(得分:3)

每次输入数字时,您都在创建一个新的OperationClass对象:

if (a == 1) {  
    new OperationClass().addPerson(); //Creating a new object
} if (a == 2) {  
    new OperationClass().listPerson(); //Creating a new object
} if (a == 3) {  
    new OperationClass().deletePerson(); //Creating a new object
} if (a == 4) {  
    System.out.println("Thanks for using the program");  
}  

尝试调用已有对象的方法:

if (a == 1) {  
    addPerson();  
} if (a == 2) {  
    listPerson();  
} if (a == 3) {  
    deletePerson();  
} if (a == 4) {  
    System.out.println("Thanks for using the program");  
}  

这将调用您在main()

中创建的对象上的方法

编辑:

正如所指出的,由于你的operation()方法是静态的,所以这不会有用。我建议要么使这个方法非静态(因此是一个实例方法):

public void operation() { 
    //Your operation() code
}

或将operation()代码全部移动到OperationClass的构造函数,以便在创建该类的对象时正确运行代码:

public OperationClass() {
    //Your operation() code
}

答案 1 :(得分:2)

你几乎到处都有new OperationClass().operation()/add/list...;,你应该知道,当你new ...创建一个新实例时,会有一个空的ArrayList<String> Person列表。

您可能希望使用相同的实例,而不是每次都创建一个新实例。

答案 2 :(得分:2)

这里是为您工作和修改的代码:

import java.util.*;  

public class OperationClass implements OperationInterface {  
    String id;  
    String fname;  
    String lname;  
    static ArrayList<String> Person=new ArrayList<String>();  

    public static void main(String args[]) {  
        new OperationClass().operation();  
    }  

    public static void operation() {  
        int a;  
        Scanner in = new Scanner(System.in);  
        System.out.println("Enter 1 for Adding new Record");  
        System.out.println("Enter 2 to see List of Records");  
        System.out.println("Enter 3 to Delete a record");  
        System.out.println("Enter 4 to Exit!!");  

        a = in.nextInt();  

        if (a == 1) {  
            new OperationClass().addPerson();  
        } if (a == 2) {  
            new OperationClass().listPerson();  
        } if (a == 3) {  
            new OperationClass().deletePerson();  
        } if (a == 4) {  
            System.out.println("Thanks for using the program");  
        }  
    }  

    /** 
     * adds a new Person and stores in the collection 
     */  
    @Override  
    public void addPerson() {  


        Scanner in = new Scanner(System.in);   
        System.out.println("Enter a the id");  
        id = in.next();  

        System.out.println("Enter a the First Name");  
        fname = in.next();  

        System.out.println("Enter a the Last Name");  
        lname = in.next();  


        Person.add(id);  
        Person.add(fname);  
        Person.add(lname);  



        new OperationClass().operation();  
    }  

    @Override  
    public void listPerson() {  
        Iterator itr=Person.iterator();  
        while(itr.hasNext()){  
            System.out.println(itr.next());  
        }  
     new OperationClass().operation();  

    }  

    @Override  
    public void deletePerson() {  
        System.out.println("Delete under construction");  
    }  

    @Override  
    public void quit() {  

    }  
}   

答案 3 :(得分:1)

您已将ArrayList声明为instance variable

简单来说,它意味着a new object a new ArrayList will be cretaed

现在,在调用您正在执行的方法时,new OperationClass().addPerson();

在所有这些陈述中new OperationClass();创建一个新对象,从而创建一个新的ArrayList

因此,在最后一个列表中没有任何内容。

我建议如下:

  1. 由于您的public static void operation()方法是静态的,因此您无需创建对象来调用它。您可以通过类名直接调用它。
  2. 因此,new OperationClass().operation();可以替换为OperationClass.operation();。但是它无法解决您的问题。

    解决方案

    1. 您需要做的是拥有OperationClass的一个共同对象并将其存储在某个引用变量中然后使用此对象来调用其他方法,即不要调用new OperationClass()一次又一次。

    2. 可以使用相同代码的替代方案将声明您的ArrayList是静态的,static ArrayList<String> Person=new ArrayList<String>();

    3. 通过这样做,所有对象都会很常见,您将向单个公共ArrayList添加数据。