我正在创建一个模拟scantron标记功能的程序。我有一个文本文件,学生的名字跟着他们的答案。这是我创建的示例文件:
Arnie
EADCC
Betty
dadec
Carol
ba ea
在我的主要内容中,我要求用户输入文件名,然后将其传递给我创建的QuizMarker类。现在我想把这个名字作为字符串抓取并将其放入一维数组并将答案作为一个字符数组抓取并将其放入一个2D数组中,以便我可以将学生答案与正确的答案文件进行比较。我为了测试目的硬编码了行数。我一直试图弄清楚如何使这项工作成为一个整个疯狂的日子,但我的大脑现在完全被烤了。我需要帮助。这是方法readNamesAnswers():
public void readNamesAnswers(){
while (readerStu_Ans.hasNext()){
studentName[indexStudentName] = readerStu_Ans.nextLine();
for (int iRowStudentAnswer=0; iRowStudentAnswer<3; iRowStudentAnswer++){
studentAnswers[iRowStudentAnswer]= stuAnswers.split("(?!^)");
System.out.println(studentAnswers[iRowStudentAnswer][0]);
}
for(int row=0; row<3; row++){
for(int column= 0; column<studentAnswers[column].length; column++){
System.out.println(studentAnswers[column][row]);
}
}
System.out.println("\n"+studentName[indexStudentName]);
System.out.println();
indexStudentName++;
}
}
PS。我是Java和编程的新手。
答案 0 :(得分:1)
您创建了非常复杂的代码,难以理解且难以维护。 你真的需要使用二维数组吗?
这可以通过另一种方式轻松完成。您可以创建另一个类,其中包含每个学生的所有数据。这样的事情。
public class Student{
private String name;
private String answer;
public Student(String name, String answer) {
super();
this.name = name;
this.answer = answer;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAnswer() {
return answer;
}
public void setAnswer(String answer) {
this.answer = answer;
}
}
通过上课,您可以轻松地为每个学生设置并获取任何信息。
您可以逐行阅读文件,并在新的学生实例中添加每个学生的信息。 每个学生都是学生的新实例。
您可以将所有这些对象保存在List,Set,Map等中......阅读Java中的collections。这非常重要。
这是一种方法。
List<Student> students = new ArrayList<Student>();
int studentCount = 3;
for (int i = 0; i < studentCount; i++) {
students.add(new Student("name", "answer"));
}
这样,代码易于阅读且易于理解。 一旦你学会了收藏,你就会问自己,如果没有它你怎么能编程...你会重生!