gpt4 book ai didi

java - 如何在一个对象中存储一个字符串和两个并行数组列表。 ( java )

转载 作者:行者123 更新时间:2023-11-30 10:37:24 26 4
gpt4 key购买 nike

大家好,我几天前问了以下问题,但仍然有点麻烦。

“以下为原帖”我想存储一个学生姓名,每个姓名都有两个与该姓名关联的 ArrayList。我想将所有内容都放在一个类(class) Student_quizes 或类似的东西中

所以我主要是尝试将 studentName、quizNames 数组列表和 quizScores 数组列表存储在一个对象中。 quizNames 和 quizScores 将平行。

我不确定我是否以正确的方式进行这件事我一整天都在尝试这个并且很困惑,有没有人对我如何更好地做到这一点有任何建议。

如果我的问题令人困惑,我很抱歉,我想程序会像这样运行。

input student name

michael

input quiz

science

input quiz score

80

add another quiz Y/N?

Y

input quiz ...

add another student Y/N?

Y ...

Student name : michael

quiz name : science, Score: 80

quiz name : maths, Score : 85

student name : joe

Quiz name : science, Score 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);

}

}

这是我的类(class)


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;

公共(public)课 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。我可以制作很多学生对象,每个学生的名字都是正确的,但每个学生的测验信息都是一样的。它使用最后一个输入的学生的测验信息,所以它基本上覆盖了每个学生对象的测验信息。

任何输入都非常感谢,谢谢大家:)

最佳答案

一些快速提示:

public class Student_Quizes {
private String studentName;
private String quizName; ...

实际上是一个好的开始,但是你在这里弄错了:

this.quizNames.add(quizName);
this.quizScores.add(score);

您看:您希望您的类 Student_Quizes 允许添加两条信息。因此:您没有在构造函数中将任何内容放入您的两个列表中。相反,您添加一个方法,例如

public void addQuizInfo(String name, Integer score) {
quizNames.add(name);
quizScores.add(score);
}

到你的类(class)。然后,您只需根据用户的输入继续调用此方法!

你的问题基本上是你“反复”把东西放在一起。相反,您应该清楚地将事物分开。为了更清楚地说明这一点;您的类(class)名称已经走错了方向。称它为 Student ... 然后想一想学生有什么属性 --- 他有一个名字,然后他有一个包含他所从事的测验的列表。

因此,您首先创建一个学生对象:

Student newStudent = new Student(name);

然后你使用我上面展示的那个方法:

student.addQuiz(quizname, score);

最后:您的代码甚至无法编译。您在 Student_Quizes 中声明您的列表是

ArrayList<String>

例如。这样的列表接受字符串。因此,您要他们添加的代码……另一个列表 根本无效!

最后:你应该使用List、Map等“接口(interface)”类型作为类型——你只使用ArrayList等具体实现类来调用new,比如

List<Integer> scores = new ArrayList<>();

关于java - 如何在一个对象中存储一个字符串和两个并行数组列表。 ( java ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40162647/

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