-1
votes

Comment modifier mon type de données de la liste des matrices en tableau

J'ai un programme de noyau qui utilise des tableaux de 2 dimensions pour lire dans un infilier avec 2 grades d'examen, puis le nom des élèves.Le programme est

import java.io.*;
import java.util.*;
import java.util.List;
import java.util.ArrayList;


public class 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 Students = inFile.readLine();
            for (int col = 0; col < numberOfExams; col++) {
                int Grades = Integer.parseInt(inFile.readLine());
            }
        }
    }

    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");
    }
}


3 commentaires

Quelles erreurs obtenez-vous, quel code les causent et s'il vous plaît, veuillez apprendre à indenter correctement.


Je dois dire .... Il ne peut y avoir rien de plus ennuyeux que d'essayer de regarder à travers le code qui n'est pas correctement indenté. Juste dire. Voilà ce Donc, POST ou ce Autre So Post .


@MidnightBlue examine l'erreur avec soin tout en compilant le deuxième programme. C'est assez explicite. Étudier l'utilisation de la classe ArrayList. Ensuite, vous saurez accéder à l'élément ArrayList à l'aide de Obtenir (INT Index) à la place de [] opérateur.


4 Réponses :


0
votes

Je vais vous donner l'exemple suivant

String [] names = {"John","Bill","Sam"};
List arrylist =Arrays.asList(names);


0 commentaires

0
votes

Les erreurs que vous obtenez sont parce que la syntaxe code> arraylist code> est différente. Je vous suggère de commenter tous les anciens code qui ne compilent pas et ne commencent pas la méthode informatique par méthode. Utilisez le "Changer un peu, tester une petite" approche ".

Voici un démarrage: p>

J'ai renommé votre étudiants code> et grades code> variables Loadarrays () Code> Comme ils sont des articles singuliers, pas pluriel. La Convention Java suggère d'utiliser des noms minuscules pour les variables. En outre, utilisez l'étui supérieur à chameau pour vos noms de classe: GradbookarrayList CODE>. P>

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");
    }
}


0 commentaires

0
votes

J'ai changé une méthode pour montrer comment utiliser ArrayList. Étant donné que les grades sont 2 dimensions, vous devez la définir comme arraylist de ArrayList et accéder à sa contient sous forme de grades.get (CNT1) .GET (CNT2). Pour ajouter une note, vous pouvez utiliser la méthode Ajouter des grades.get (CNT1) .ADD (CNT2). xxx


0 commentaires

0
votes

Je vais vous donner l'exemple suivant

String [] names = {"John","Bill","Sam"};
List arrylist =Arrays.asList(names);


0 commentaires