Вы получаете ошибки, потому что синтаксис ArrayList
отличается. Я предлагаю вам закомментировать весь старый код, который не компилируется, и начать исправлять его методом по методам. Используйте подход «немного измени, немного протестируй».
Вот начало:
Я переименовал ваши Students
и Grades
переменные в loadArrays()
, поскольку они являются единичными элементами , а не во множественном числе. Java соглашение предлагает использовать строчные имена для переменных. Кроме того, используйте верхний регистр верблюда для имен классов: GradeBookArrayList
.
public static void loadArrays(ArrayList<String> students, ArrayList<Integer> grades, BufferedReader inFile, int numberOfStudents,
int numberOfExams) throws IOException {
for (int row = 0; row < numberOfStudents; row++) {
String student = inFile.readLine();
students.add(student); // How to add to students array
for (int col = 0; col < numberOfExams; col++) {
int grade = Integer.parseInt(inFile.readLine());
grades.add(grade); // How to add to grades array
}
}
}
Синтаксис для ArrayList
не использует квадратные скобки для индексации, как это делают примитивные массивы. Пожалуйста, обратитесь к онлайн-документации или примерам синтаксиса ArrayList.
Вот ваш закомментированный, компилируемый и с отступом код:
import java.io.*;
import java.util.ArrayList;
public class gradebookarraylist { // Use upper camel case for your class names: GradeBookArrayList
public static int numberOfStudents;
public static int numberOfExams;
public static void main(String[] args) throws IOException {
ArrayList<String> Students = new ArrayList<String>(); // the program allows for up to 25 students -> change to array list type str hold students names
ArrayList<Integer> Grades = new ArrayList<Integer>(); // and 10 exam grades per student-> change to array list hold student grades type int
BufferedReader inFile;
inFile = new BufferedReader(new FileReader("Gradebook.txt"));
int option;
boolean done = false;
numberOfStudents = Integer.parseInt(inFile.readLine());
numberOfExams = Integer.parseInt(inFile.readLine());
loadArrays(Students, Grades, inFile, numberOfStudents, numberOfExams);
do {
option = pickOption();
done = selectFunction(Students, Grades, option);
}
while (!done);
cleanUp(Students, Grades, numberOfStudents, numberOfExams);
}
public static void loadArrays(ArrayList<String> students, ArrayList<Integer> grades, BufferedReader inFile, int numberOfStudents,
int numberOfExams) throws IOException {
for (int row = 0; row < numberOfStudents; row++) {
String student = inFile.readLine();
students.add(student);
for (int col = 0; col < numberOfExams; col++) {
int grade = Integer.parseInt(inFile.readLine());
grades.add(grade);
}
}
}
public static void printWholeBook(ArrayList<String> students, ArrayList<Integer> grades, int numberOfStudents, int numberOfExams) {
System.out.println("Here are the grades for all students.\n");
System.out.print("Name");
for (int cnt = 1; cnt <= numberOfExams; cnt++)
System.out.print(" Exam" + cnt);
System.out.println();
for (int i = 0; i < numberOfStudents; i++) {
System.out.print(students.get(i) + " ");
for (int j = 0; j < numberOfExams; j++) {
System.out.print(grades.get(j) + " ");
}
System.out.println();
}
}
public static int pickOption() throws IOException {
BufferedReader in;
in = new BufferedReader(new InputStreamReader(System.in));
int choice;
System.out.println("\nWhat would you like to do?");
System.out.println("1) Compute the average for all students?");
System.out.println("2) Compute the average for all exams?");
System.out.println("3) Add a new student?");
System.out.println("4) Add a new exam?");
System.out.println("5) Print the whole grade book?");
System.out.println("6) Compute the average for one student and their letter grade?");
System.out.println("7) Compute the average for one exam and its letter grade?");
System.out.println("9) Exit the program?\n");
choice = Integer.parseInt(in.readLine());
return choice;
}
public static boolean selectFunction(ArrayList<String> students, ArrayList<Integer> grades, int option) throws IOException {
boolean done = false;
switch (option) {
case 1: {
allStudentAverage(students, grades, numberOfStudents, numberOfExams);
break;
}
case 2: {
allExamAverage(students, grades, numberOfStudents, numberOfExams);
break;
}
case 3: {
numberOfStudents++;
addStudent(students, grades, numberOfStudents, numberOfExams);
break;
}
case 4: {
numberOfExams++;
addExam(students, grades, numberOfStudents, numberOfExams);
break;
}
case 5: {
printWholeBook(students, grades, numberOfStudents, numberOfExams);
break;
}
case 6: {
oneStudentAverage(students, grades, numberOfStudents, numberOfExams);
break;
}
case 7: {
oneExamAverage(students, grades, numberOfStudents, numberOfExams);
break;
}
case 9: {
done = true;
break;
}
default:
System.out.println("Invalid input.");
} // end switch
return done;
} // end select function
public static void allStudentAverage(ArrayList<String> students, ArrayList<Integer> grades,
int numberOfStudents, int numberOfExams) {
double total = 0;
System.out.println("Here are the averages for all students.\n");
// for (int cnt1 = 0; cnt1 < numberOfStudents; cnt1++) {
// System.out.print("The average for " + students[cnt1] + " is ");
// for (int cnt2 = 0; cnt2 < numberOfExams; cnt2++) {
// total = total + grades[cnt1][cnt2];
// }
// System.out.println(total / numberOfExams);
// total = 0;
// }
}
public static void allExamAverage(ArrayList<String> students, ArrayList<Integer> grades, int numberOfStudents,
int numberOfExams) {
double total = 0;
System.out.println("Here are the averages for all exams.\n");
// for (int cnt1 = 0; cnt1 < numberOfExams; cnt1++) {
// System.out.print("The average for Exam #" + (cnt1 + 1) + " is ");
// for (int cnt2 = 0; cnt2 < numberOfStudents; cnt2++) {
// total = total + grades[cnt2][cnt1];
// }
// System.out.println(total / numberOfStudents);
// total = 0;
// }
}
public static void addStudent(ArrayList<String> students, ArrayList<Integer> grades, int numberOfStudents,
int numberOfExams) throws IOException {
BufferedReader in;
in = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Enter the name of the student to be added.");
students.add(in.readLine());
System.out.println("Enter the grades for the new student.");
for (int cnt = 0; cnt <= numberOfExams - 1; cnt++) {
System.out.println("Enter grade for exam " + (cnt + 1));
grades.add(Integer.parseInt(in.readLine()));
}
}
public static void addExam(ArrayList<String> students, ArrayList<Integer> grades, int numberOfStudents,
int numberOfExams) throws IOException {
BufferedReader in;
in = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Enter grades for the new exam.");
// for (int cnt = 0; cnt <= numberOfStudents - 1; cnt++) {
// System.out.println("Enter the new grade for " + students[cnt]);
// grades.add(Integer.parseInt(in.readLine()));
// }
}
public static void oneStudentAverage(ArrayList<String> students, ArrayList<Integer> grades,
int numberOfStudents, int numberOfExams) throws IOException {
BufferedReader in;
in = new BufferedReader(new InputStreamReader(System.in));
double total = 0;
int studentNumber;
System.out.println("Please enter the number of the student whose average would you like to see?\n");
// for (int cnt = 0; cnt < numberOfStudents; cnt++) {
// System.out.println((cnt + 1) + ") " + students[cnt]);
// }
studentNumber = Integer.parseInt(in.readLine());
// System.out.print("\nThe average for " + students[studentNumber - 1] + " is ");
// for (int cnt2 = 0; cnt2 < numberOfExams; cnt2++) {
// total = total + grades[studentNumber - 1][cnt2];
// }
double average = total / numberOfExams;
System.out.println(average);
// if (average >= 90) {
// System.out.println(students[studentNumber - 1] + " has an A.");
// } else if (average >= 80 && average <= 89) {
// System.out.println(students[studentNumber - 1] + " has a B.");
// } else if (average >= 70 && average <= 79) {
// System.out.println(students[studentNumber - 1] + " has a C.");
// } else if (average >= 60 && average <= 69) {
// System.out.println(students[studentNumber - 1] + " has a D.");
// } else if (average <= 59) {
// System.out.println(students[studentNumber - 1] + " has an F.");
// }
}
public static void oneExamAverage(ArrayList<String> students, ArrayList<Integer> grades, int numberOfStudents,
int numberOfExams) throws IOException {
BufferedReader in;
in = new BufferedReader(new InputStreamReader(System.in));
double total = 0;
int examNumber;
System.out.println("There are " + numberOfExams + " exams.");
System.out.println("Please enter the number of the exam whose average would you like to see?\n");
examNumber = Integer.parseInt(in.readLine());
System.out.print("The average for Exam #" + (examNumber) + " is ");
// for (int cnt2 = 0; cnt2 < numberOfStudents; cnt2++) {
// total = total + grades[cnt2][examNumber - 1];
// }
double average = total / numberOfStudents;
System.out.println(average);
if (average >= 90) {
System.out.println("The average for Exam #" + examNumber + " is an A.");
} else if (average >= 80 && average <= 89) {
System.out.println("The average for Exam #" + examNumber + " is a B.");
} else if (average >= 70 && average <= 79) {
System.out.println("The average for Exam #" + examNumber + " is a C.");
} else if (average >= 60 && average <= 69) {
System.out.println("The average for Exam #" + examNumber + " is a D.");
} else if (average <= 59) {
System.out.println("The average for Exam # " + examNumber + " is an F.");
}
}
public static void cleanUp(ArrayList<String> students, ArrayList<Integer> grades, int numberOfStudents,
int numberOfExams) throws IOException {
// set up output file
PrintWriter outFile;
outFile = new PrintWriter(new FileWriter("Gradebook.txt"));
outFile.println(numberOfStudents);
outFile.println(numberOfExams);
// write array to output file
for (int row = 0; row < numberOfStudents; row++) {
outFile.println(students.get(row));
for (int col = 0; col < numberOfExams; col++) {
outFile.println(grades.get(col));
}
}
outFile.close();
System.out.println("The Grade Book file is saved so you can");
System.out.println("pick up next time where you left off.\n");
}
}