我对数组列表不太熟悉。 如果我运行程序,我可以键入所有变量,但是当我想查看自己写的内容时,它不会打印
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
答案 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;
}
}
}
}
您现在拥有的是一个组织良好的代码,比起最初的代码更容易进行单元测试和维护,并且可以轻松地进行扩展。