Java 我无法从arraylist打印用户输入

Java 我无法从arraylist打印用户输入,java,arraylist,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

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


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

导入java.util.*;
公共类动态{
私有字符串fname;
私有字符串名称;
私人互联网;
私人弦乐课程;
私有int-idnum;
公共动态(字符串Fname、字符串Lname、整数年龄、字符串课程、整数IdNum){
fname=fname;
lname=lname;
年龄=年龄;
课程=课程;
idnum=idnum;
}
公共字符串getfName(){
返回fname;
}
公共字符串getlName(){
返回lname;
}
公共整数getAge(){
回归年龄;
}
公共字符串getCourse(){
返回路线;
}
public int getidNum(){
返回idnum;
}
公共字符串toString()
{
返回fname+“”+lname+“”+age+“”+course+“”+idnum;
}
公共静态void main(字符串[]args){
菜单();
}//干管末端
公共静态无效菜单(){
ArrayList用户=新建ArrayList();
扫描仪输入=新扫描仪(系统输入);
System.out.println(“1:添加学生\n2:查看学生”);
int choose=in.nextInt();
开关(选择){
案例1:
addStudent(用户);
打破
案例2:
viewStudent(用户);
打破
}   
}//菜单结束
这是我获取用户输入的方法

    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
publicstaticvoidaddstudent(arraylistusers){
扫描仪输入=新扫描仪(系统输入);
System.out.println(“请输入学生姓名”);
字符串Fname=in.nextLine();
System.out.println(“请输入学生的姓氏”);
字符串Lname=in.nextLine();
System.out.println(“请输入学生年龄”);
int Age=in.nextInt();
字符串trash=in.nextLine();
System.out.println(“请输入学生的课程”);
字符串Course=in.nextLine();
System.out.println(“请输入学生Id号”);
int IdNum=in.nextInt();
动态学生=新动态(Fname、Lname、年龄、课程、IdNum);
用户。添加(学生);
菜单();
}//添加用户结束
下面是我的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

publicstaticvoidviewStudent(ArrayList用户){
System.out.printf(“%10s%7s%8s%10s\n”、“姓名”、“年龄”、“课程”、“ID号”);
用于(动态螺柱:用户)
{
系统输出打印LN(螺柱);
}   
}//视图结束用户
}//学生下课

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

import java.util.*;
public class Dynamic
{
    static ArrayList<Dynamic> users = new ArrayList<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()
    {        
        Scanner in = new Scanner (System.in);
        System.out.println("1: Add Student\n2: View Student");
        int choose = in.nextInt();
        switch(choose) {
            case 1:
                addStudent();
                break;
            case 2:
                viewStudent();
                break;
            }   
     }
    public static void addStudent()
    {
        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
    public static void viewStudent()
    {
        System.out.printf("%10s%7s%8s%10s\n", "Name","Age","Course","IdNumber");
        for (Dynamic stud : users)
        {
            System.out.println(stud);
        }   
    }//end of viewusers
}
import java.util.*;
公共类动态
{
静态ArrayList用户=新建ArrayList();
私有字符串fname;
私有字符串名称;
私人互联网;
私人弦乐课程;
私有int-idnum;
公共动态(字符串Fname、字符串Lname、整数年龄、字符串课程、整数IdNum)
{
fname=fname;
lname=lname;
年龄=年龄;
课程=课程;
idnum=idnum;
} 
公共字符串getfName()
{
返回fname;
}
公共字符串getlName()
{
返回lname;
} 
公共整数getAge()
{
回归年龄;
}
公共字符串getCourse()
{
返回路线;
}
public int getidNum()
{
返回idnum;
}
公共字符串toString()
{
返回fname+“”+lname+“”+age+“”+course+“”+idnum;
}
公共静态void main(字符串[]args)
{ 
菜单();
}//干管末端
公共静态无效菜单()
{        
扫描仪输入=新扫描仪(系统输入);
System.out.println(“1:添加学生\n2:查看学生”);
int choose=in.nextInt();
开关(选择){
案例1:
addStudent();
打破
案例2:
学生视图();
打破
}   
}
公共静态void addStudent()
{
扫描仪输入=新扫描仪(系统输入);
System.out.println(“请输入学生姓名”);
字符串Fname=in.nextLine();
System.out.println(“请输入学生的姓氏”);
字符串Lname=in.nextLine();
System.out.println(“请输入学生年龄”);
int Age=in.nextInt();
字符串trash=in.nextLine();
System.out.println(“请输入学生的课程”);
字符串Course=in.nextLine();
System.out.println(“请输入学生Id号”);
int IdNum=in.nextInt();
动态学生=新动态(Fname、Lname、年龄、课程、IdNum);
用户。添加(学生);
菜单();
}//添加用户结束
公共静态void viewStudent()
{
System.out.printf(“%10s%7s%8s%10s\n”、“姓名”、“年龄”、“课程”、“ID号”);
用于(动态螺柱:用户)
{
系统输出打印LN(螺柱);
}   
}//视图结束用户
}

希望这会有所帮助

您的问题与
ArrayList
没有任何关系,因为您所做的一切都是
添加
并对其进行迭代,并且没有任何问题。现在,您应该永远不做的是建议您在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();
    }
}
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;
                }
            }
        }
    }  
public class Test {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        DynamicDaoImpl dynamicDao = new DynamicDaoImpl(new DynamicRepository(new ArrayList<>()));
        DataInputOutputClass dataInputOutputClass = new DataInputOutputClass(br, dynamicDao);
        Driver dr = new Driver(br, dataInputOutputClass);

        dr.run();
    }
}