问题遇到的现象和发生背景
如何通过姓名或科目来储存、删除数据,并最终按照科目来列出所有数据
用代码块功能插入代码,请勿粘贴截图
package lab6;
import java.util.ArrayList;
import java.util.Scanner;
public class Manager {
public static Scanner scanner = new Scanner(System.in);
public static ArrayList<Student> students = new ArrayList<>();
public static void main(String[] args) {
while (true) {
System.out.println("----------Gradebook-----------");
System.out.println("--【1】Record student scores---");
System.out.println("--【2】Delete student scores---");
System.out.println("--【3】Search by the subject---");
Student student = new Student();
System.out.println("Enter your choice");
String choice = scanner.next();
switch (choice) {
case "1":
student.addScore(students);
break;
case "2":
student.deleteStudent(students);
break;
case "3":
student.subject(students);
default:
break;
}
}
}
}
package lab6;
import java.util.ArrayList;
import java.util.Scanner;
public class Student {
public static Scanner scanner = new Scanner(System.in);
private String name;
private float math;
private float english;
public Student() {
}
public Student(String name, float math, float english ) {
this.name = name;
this.math = math;
this.english = english;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getMath() {
return math;
}
public void setMath(float math) {
this.math = math;
}
public float getEnglish() {
return english;
}
public void setEnglish(float english) {
this.english = english;
}
public void addScore(ArrayList<Student> students) {
System.out.println("--Record student scores---");
System.out.println("Please enter the following data in sequence:");
String name;
while (true) {
System.out.println("name");
name = scanner.next();
break;
}
System.out.println("Math");
float math = scanner.nextFloat();
System.out.println("English");
float english = scanner.nextFloat();
Student student = new Student();
student.setName(name);
student.setMath(math);
student.setEnglish(english);
students.add(student);
System.out.println("Adding succeeded");
}
public void deleteStudent(ArrayList<Student> students) {
System.out.println("--Delete student scores---");
System.out.println("Enter the name of the student whose grade you want to delete");
String name = scanner.next();
int index = -1;
for (int i = 0; i < students.size(); i++) {
Student student = students.get(i);
if (student.getName() == name) {
index = i;
break;
}
}
students.remove(index);
System.out.println("--Successfully deleted---");
}
public void subject(ArrayList<Student> students) {
System.out.println("--Search by the subject---");
System.out.println("Please enter the subject you want to find");
}
}
运行结果及报错内容
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index -1 out of bounds for length 0
at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)
at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70)
at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:266)
at java.base/java.util.Objects.checkIndex(Objects.java:359)
at java.base/java.util.ArrayList.remove(ArrayList.java:504)
at lab6/lab6.Student.deleteStudent(Student.java:89)
at lab6/lab6.Manager.main(Manager.java:25)
我想要达到的结果
1.根据姓名添加成绩
2.按学生姓名和科目名称删除成绩
3.按照科目名称查询成绩,要能看到所有学生这一科的成绩