【发布时间】:2016-10-20 19:10:15
【问题描述】:
大家好,几天前我问了以下问题,但还是遇到了一些麻烦。
“以下为原帖” 我想存储一个学生姓名,每个姓名都有两个与该姓名关联的 ArrayList。我想把这一切都放在一个班级 Student_quizes 或类似的东西中
所以我基本上试图将 studentName、quizNames arraylist 和 quizScores arraylist 存储在一个对象中。 quizNames 和 quizScores 将是平行的。
我不确定我是否以正确的方式去做这件事我整天都在尝试这个并且很困惑,有没有人对我如何更好地做到这一点有任何建议。
对不起,如果我的问题令人困惑,我想程序会这样运行。
输入学生姓名
迈克尔
输入测验
科学
输入测验分数
80
添加另一个测验是/否?
是的
输入测验...
添加另一个学生是/否?
是的 ...
学生姓名:迈克尔
测验名称:科学,分数:80
测验名称:数学,分数:85
学生姓名:乔
测验名称:科学,分数 60
我的代码现在到处都是,但我把我的代码贴出来了。
这是主要的
package Student_Quizes;
import java.util.ArrayList;
import java.util.Scanner;
import static student.student_main.print;
public class Student_quizes_main {
public static void main(String[] args) {
boolean addStudents = true;
addStudent();
}
public static void addStudent() {
ArrayList<Student_Quizes> students = new ArrayList<>();
Scanner in = new Scanner(System.in);
System.out.println("add student");
String studentName;
String Continue;
int quizScore;
String quizName;
boolean addStudents = true;
boolean addQuiz = true;
while (addStudents) {
System.out.println("Student Name");
studentName = in.next();
while (addQuiz) {
System.out.println("Quiz Name");
quizName = in.next();
System.out.println("average Score");
quizScore = in.nextInt();
students.add(new Student_Quizes(quizName, quizScore));
System.out.println("Add another Quiz Y/N");
Continue = in.next();
if (Continue.equalsIgnoreCase("n")) {
addQuiz = false;
}
}
System.out.println("Add another Student Y/N");
Continue = in.next();
if (!Continue.equalsIgnoreCase("n")) {
addQuiz = true;
} else {
addStudents = false;
}
}
print(students);
}
}
这是我的课
package Student_Quizes;
import java.util.ArrayList;
public class Student_Quizes {
private String studentName;
private String quizName;
private int score;
ArrayList<String> quizNames = new ArrayList<>();
ArrayList<Integer> quizScores = new ArrayList<>();
public Student_Quizes() {
studentName = "";
quizNames.add("");
quizScores.add(0);
}
public Student_Quizes(String studentName, ArrayList QuizNames, ArrayList quizScores) {
this.studentName = studentName;
this.quizNames.add(quizName);
this.quizScores.add(score);
}
public void print() {
System.out.println("Name:\t\t" + this.studentName);
System.out.println("Quiz Name:\t" + this.quizNames);
System.out.println("Quiz Score:\t" + this.quizScores);
}
}
从那以后我重新编写了我的代码 我现在的代码
这是主要的
打包学生;
导入 java.util.ArrayList; 导入 java.util.Scanner;
公开课 Student_main {
public static void main(String[] args) {
//Create ArrayList of student objects
ArrayList<Student> students = new ArrayList<>();
String name;
boolean addStudent = true;
String Continue;
Scanner in = new Scanner(System.in);
//loop to add multiple students
while (addStudent) {
System.out.println("Student Name");
name = in.next();
//calls the method to add student information
addStudents(name, students);
System.out.println("Would you like to add another Student? Y/N ");
Continue = in.next();
//if user does not type n it will continue
if (Continue.equalsIgnoreCase("n")) {
addStudent = false;
}
}
System.out.println(students.toString());
}
public static void addStudents(String name, ArrayList<Student> students) {
//Parralell arrays for quiz names and quiz scores
ArrayList<String> quizNames = new ArrayList<>();
ArrayList<Integer> quizScores = new ArrayList<>();
boolean addQuiz = true;
String Continue;
Scanner in = new Scanner(System.in);
// Loop to continue adding quizzes
while (addQuiz) {
//Method yo add quiz names and scores
addQuizNames(quizNames);
addQuizScores(quizScores);
System.out.println("Would yo like to add another Quiz? Y/N ");
Continue = in.next();
if (Continue.equalsIgnoreCase("n")) {
addQuiz = false;
// adds the new student passing the students name and quiz info
students.add(new Student(name, quizNames, quizScores));
}
}
}
public static void addQuizNames(ArrayList<String> quizNames) {
String quizName;
Integer quizScore;
Scanner in = new Scanner(System.in);
System.out.println("Enter Quiz Name");
quizName = in.next();
quizNames.add(quizName);
}
public static void addQuizScores(ArrayList<Integer> quizScores) {
Integer quizScore;
Scanner in = new Scanner(System.in);
System.out.println("Enter Quiz Score");
quizScore = in.nextInt();
quizScores.add(quizScore);
}
}
类 打包学生;
导入 java.util.ArrayList;
公开课学生{
private String name;
private static ArrayList<String> quizNames = new ArrayList<>();
private static ArrayList<Integer> quizScores = new ArrayList<>();
public Student(String name, ArrayList<String> quizNames, ArrayList<Integer> quizScores) {
this.name = name;
Student.quizNames = quizNames;
Student.quizScores = quizScores;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public static void setQuizNames(ArrayList<String> quizNames) {
Student.quizNames = quizNames;
}
public static void setQuizScores(ArrayList<Integer> quizScores) {
Student.quizScores = quizScores;
}
public ArrayList<String> getQuizNames() {
return quizNames;
}
public ArrayList<Integer> getQuizScores() {
return quizScores;
}
@Override
public String toString() {
// adds student info to a formated string
StringBuilder out = new StringBuilder();
for (int i = 0; i < quizScores.size(); i++) {
out.append("\n quiz : ").append(quizNames.get(i)).append("\t\tScore : ").append(quizScores.get(i));
}
String finalString = out.toString();
return "\n\nStudent : " + name + finalString;
}
}
问题 我现在遇到的问题是 quizNames 和 QuizScores。我可以制作许多学生对象,每个学生的学生姓名都是正确的,但每个学生的测验信息都是相同的。它使用最后输入的学生的测验信息,因此它基本上会覆盖每个学生对象的测验信息。
感谢大家的任何意见:)
【问题讨论】:
-
问题是什么?
-
您永远不应该,永远,永远不会有并行数组列表、并行数组或并行任何数据结构。您应该做的是创建一个带有测验名称和测验分数的测验类。然后,在您的 Student 类中,您有 一个 Quiz 实例列表。
-
@GilbertLeBlanc 是完全正确的。您应该将测验结果存储在 Student 类中,或者创建一个映射,其中键是学生姓名,值是他们拥有的结果列表。
标签: java