gpt4 book ai didi

java - 如何不允许用户在 ArrayList 的对象中输入重复条目

转载 作者:行者123 更新时间:2023-11-30 01:40:45 24 4
gpt4 key购买 nike

我创建了一个程序来输入学生详细信息,例如姓名和学号。卷号必须唯一,用户不能为同一卷号添加多个记录。我创建了 3 个类,学生类、具有 ArrayList 的 StuMaster 类以及调用 main 函数时的主类。以下是主要类:

public static void main(String[] args) {

boolean exit = false;
Scanner input = new Scanner(System.in);

do {
System.out.println("Enter any option from below:");
System.out.println("1 Enter new student");
System.out.println("2 View all students");
System.out.println("3 Exit");

switch (input.nextInt()) {
case 1:
System.out.println("Enter the details of student: ");
StuMaster stm = new StuMaster();
stm.addStudentDetails();
break;

case 2:
System.out.println("All the records are: ");
StuMaster stm1 = new StuMaster();
stm1.displayAllStudents();

case 3:
exit = true;
System.exit(0);

default:
System.out.println("Invalid entry!");
}

} while (!exit);
}

学生类(class):

public class Student {

private int rollNumber, marks;
public name;

public Student() {
Scanner input = new Scanner(System.in);
System.out.println("Enter roll number: ");
rollNumber = input.nextInt();
System.out.print("Enter name: ");
name= input.next();
System.out.println("Enter marks: ");
marks = input.nextInt();
}

public String toString() {
return "Name: " + name + "Roll no.: " + rollNumber + " ,Marks :" + marks;
}

public int getRollNo() {
return this.rollNumber;
}

StuMaster 类,其中调用 List 并定义添加学生的方法:

public class StuMaster {

static List<Student> stu = new ArrayList<Student>();
Student stuObj = new Student();

public List<Student> getStudents() {
return stu;
}

public void addStudentDetails() {

stu.add(stuObj);
System.out.println("Student record added! Following are the details that you added: \n" + stuObj);
}

public void displayAllStudents() {
System.out.println("All the students in the system: ");
for (Student s1 : stu) {
System.out.println(s1);
}
}

我是 java 新手,无法理解如何在 addStudentDetails 方法中应用 StuMaster 类中的检查。

最佳答案

如果您不想在集合中出现重复项,则您的程序需要使用Set 而不是List。但是,我将向您展示一个对原始程序稍加修改的程序,我认为从某些角度来看该程序更好:

1) 为每次迭代删除不必要的 StuMaster 实例

2) 从构造函数中删除学生属性的创建

3)更好的可读性

public class Student {
private String name;
private int rollNumber;
private int mark;

public Student(String name, int rollNumber, int mark) {
this.name = name;
this.rollNumber = rollNumber;
this.mark = mark;
}

//equals and hashcode

@Override
public String toString() {
//to string override
}
}

您可以使用 this 覆盖 hashcode 和 equals 方法教程。

public class StudentManager {
private Set<Student> students = new HashSet<>();

public void addStudent(Student student) {
students.add(student);
}

public void displayStudents() {
for (Student student : students) {
System.out.println(student);
}
}
}

这是菜单的 public static void main 方法:

public static void main(String[] args) {

boolean exit = false;
Scanner input = new Scanner(System.in);
StudentManager studentManager = new StudentManager();

do {
System.out.println("Enter any option from below:");
System.out.println("1 Enter new student");
System.out.println("2 View all students");
System.out.println("3 Exit");

switch (input.nextInt()) {
case 1:
System.out.println("Enter the details of student: ");
Student student = createStudent(input);
studentManager.addStudent(student);
break;

case 2:
System.out.println("All the records are: ");
studentManager.displayStudents();
break;

case 3:
exit = true;
System.exit(0);

default:
System.out.println("Invalid entry!");
}

} while (!exit);
}

以及一种根据输入创建学生的新方法:

public static Student createStudent(Scanner input) {
System.out.println("Enter roll number: ");
int rollNumber = input.nextInt();

System.out.print("Enter name: ");
String name = input.next();

System.out.println("Enter marks: ");
int marks = input.nextInt();

return new Student(name, rollNumber, marks);
}

PS:为情况2添加了break,否则每次您想要显示学生时它都会退出您的程序。

关于java - 如何不允许用户在 ArrayList 的对象中输入重复条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60125221/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com