我无法从阵列列表中打印用户输入

时间:2019-11-24 05:37:01

标签: java arraylist

我对数组列表不太熟悉。 如果我运行程序,我可以键入所有变量,但是当我想查看自己写的内容时,它不会打印


import java.util.*;

public class Dynamic{
    private String fname;
    private String lname;
    private int age;
    private String course;
    private int idnum;

    public Dynamic(String Fname, String Lname, int Age, String Course, int IdNum) {
        fname = Fname;
        lname = Lname;
        age = Age;
        course = Course;
        idnum = IdNum;
    }

    public String getfName() {
        return fname;   
    }

    public String getlName() {
        return lname;
    }

    public int getAge() {
        return age;
    }

    public String getCourse() {
        return course;
    }

    public int getidNum() {
        return idnum;
    }

    public String toString()
    {
        return fname+" "+lname+"  "+age+"    "+course+"    "+idnum;
    }

    public static void main(String [] args) {

        menu();
    }//end of main
    public static void menu() {
        ArrayList<Dynamic> users = new ArrayList<>();
        Scanner in = new Scanner (System.in);
        System.out.println("1: Add Student\n2: View Student");
        int choose = in.nextInt();
        switch(choose) {
        case 1:
            addStudent(users);
            break;
        case 2:
            viewStudent(users);
            break;
        }   
    }//end of menu

这是我获取用户输入的方法

    public static void addStudent(ArrayList<Dynamic> users) {
        Scanner in = new Scanner (System.in);

        System.out.println("Please Enter Name of Student");
        String Fname = in.nextLine();
        System.out.println("Please Enter Last Name of Student");
        String Lname= in.nextLine();
        System.out.println("Please Enter Age of Student");
        int Age= in.nextInt();
        String trash = in.nextLine();
        System.out.println("Please Enter Course of Student");
        String Course= in.nextLine();
        System.out.println("Please Enter Id Number of Student");
        int IdNum = in.nextInt();
        Dynamic student = new Dynamic(Fname, Lname, Age, Course, IdNum);
        users.add(student);
        menu();
    }//end of add users

下面是我的viewStudent方法,我不知道是什么错误或缺失。我也是一个初学者,我无法完全理解arraylist方法

    public static void viewStudent(ArrayList<Dynamic> users) {
        System.out.printf("%10s%7s%8s%10s\n", "Name","Age","Course","IdNumber");
        for (Dynamic stud : users)
        {
            System.out.println(stud);
        }   

    }//end of viewusers
}//end of studentclass

2 个答案:

答案 0 :(得分:0)

您可以将ArrayList声明为全局变量,然后可以在任何地方使用它,如下所示:-

ExecutorService

希望这会有所帮助

答案 1 :(得分:0)

您的问题与ArrayList根本无关,因为您所做的只是add并对其进行遍历,因此没有任何问题。现在,您应该从不要做的是this中的建议,即像长期运行一样在POJO类中创建一个static ArrayList实例应用程序在很多地方都在执行此操作,这将防止垃圾回收对象,并且这将不必要地耗尽您的堆。

对您来说,一个好的做法是将组织代码分成不同的层(每一层是一个类或一堆类)。
您可以执行以下操作:

有一个数据输入/输出层,您仅在其中读取数据(据我所知,您的输入是基于每行输入一种特定类型的输入的,因此,最好使用{{ 1}},然后逐行读取并解析为您想要的格式)。

具有数据处理层,您可以在其中对数据应用所需的任何逻辑并进行处理。

具有数据存储库层(在您的情况下,您使用的是BufferedReader,但放入单独的类中以模拟数据库)

具有数据表示层(您已经拥有POJO)。

这是您的操作方法:
资料库:

ArrayList

数据处理类(在您的情况下,它什么都不做,只不过是从存储库中获取数据和将数据放入存储库中):

public class DynamicRepository {
    private final ArrayList<Dynamic> dynamicArrayList;

    DynamicRepository(ArrayList<Dynamic> dynamicArrayList) {
        this.dynamicArrayList = dynamicArrayList;
    }

    public void add(Dynamic dynamic) {
        dynamicArrayList.add(dynamic);
    }

    public ArrayList<Dynamic> getDynamicArrayList() {
        return dynamicArrayList;
    }
}

负责获取和输出数据的数据输入和输出类(通常是控制器类):

public class DynamicDaoImpl {
    private final DynamicRepository dr;

    DynamicDaoImpl(DynamicRepository dr) {
        this.dr = dr;
    }

    public void insertIntoRepository (String name, int age) {
        dr.add(new Dynamic(name, age));
    }

    public List<Dynamic> getAllFromRepository() {
        return dr.getDynamicArrayList();
    }
}

将所有内容组合在一起的Driver类:

public class DataInputOutputClass {
    private final BufferedReader br;
    private final DynamicDaoImpl daoImpl;

    DataInputOutputClass(BufferedReader br, DynamicDaoImpl daoImpl) {
        this.br = br;
        this.daoImpl = daoImpl;
    }

    void insertData() throws IOException {
        System.out.println("Enter Name");
        String name = br.readLine();

        System.out.println("Enter Age");
        int age = Integer.parseInt(br.readLine());

        daoImpl.insertIntoRepository(name, age);
    }

    void printData() {
        for (Dynamic dynamic : daoImpl.getAllFromRepository()) {
            System.out.println(dynamic);
        }
    }
}  

现在仅使用如下主要方法创建一个完全独立的类:

 public class Driver {
        private final BufferedReader br;
        private final DataInputOutputClass dio;

        Driver(BufferedReader br, DataInputOutputClass dio) {
            this.br = br;
            this.dio = dio;
        }

        public void run() throws IOException {
            System.out.println("Enter Choice: 1 or 2");
            int choice = Integer.parseInt(br.readLine());

            switch (choice) {
                case 1: {
                    dio.insertData();
                    run();
                    break;
                }

                case 2: {
                    dio.printData();
                    break;
                }
            }
        }
    }  

您现在拥有的是一个组织良好的代码,比起最初的代码更容易进行单元测试和维护,并且可以轻松地进行扩展。