0
votes

Index ArrayList hors de liaison

Les devoirs nécessitent de lire deux fichiers et de saisir les informations des étudiants en deux arraylistes code> distincts code> s. Ensuite, j'ai besoin d'effectuer 2 fonctions: combinez les deux listes et trier la liste combinée.

public abstract class Tools {
    public static ArrayList<JUPASStudent> readJUPASFile(String f) throws Exception {
        ArrayList<JUPASStudent> jList = new ArrayList<JUPASStudent>();

        BufferedReader readbuffer = null;
        readbuffer = new BufferedReader(new FileReader(f));
        String strRead;
        while ((strRead = readbuffer.readLine()) != null) {
            String splitarray[] = strRead.split("/t");
            String firstentry = splitarray[0];
            String secondentry = splitarray[1];
            JUPASStudent x = new JUPASStudent(firstentry, Double.parseDouble(secondentry));
            jList.add(x);
        }

        readbuffer.close();
        return jList;
        }

    public static ArrayList<NonJUPASStudent> readNonJUPASFile(String f) throws Exception {
        ArrayList<NonJUPASStudent> njList = new ArrayList<NonJUPASStudent>();

        BufferedReader readbuffer = null;
        readbuffer = new BufferedReader(new FileReader(f));
        String strRead;
        while ((strRead = readbuffer.readLine()) != null) {
            String splitarray[] = strRead.split("/t");
            String firstentry = splitarray[0];
            String secondentry = splitarray[1];
            NonJUPASStudent x = new NonJUPASStudent(firstentry, Double.parseDouble(secondentry));
            njList.add(x);
        }

        readbuffer.close();
        return njList;
    }

    public static ArrayList<Student> combineArrayList(ArrayList<JUPASStudent> S1, ArrayList<NonJUPASStudent> S2) {
        ArrayList<Student> sList = new ArrayList<Student>();

        for (int i = 0; i < S1.size(); i++)
            sList.add(S1.get(i));
        for (int i = 0; i < S2.size(); i++) 
            sList.add(S2.get(i));

        return sList;
    }

    public static ArrayList<Student> sort(ArrayList<Student> s){
        for (int i = 0; i < s.size()-1; i++) {
            for (int j = 0; i < s.size()-i-1; j++) {
                if (s.get(j).getResult() > s.get(j+1).getResult()) {
                    Student Temp = s.get(j);
                    s.set(j, s.get(j+1));
                    s.set(j+1, Temp);
                }
            }
        }
        return s;
    }
}


2 commentaires

Bienvenue à cela. Veuillez lire Comment demander et noter que lorsque vous demandez des exceptions, vous devez publier la stacktrace et marquer les lignes de votre code mentionné là-bas. En bref, le message que vous obtenez signifie que vous essayez d'accéder à l'index 1 d'un tableau qui a seulement indice 0 (c'est-à-dire la longueur 1).


Veuillez poster la trace de la pile de l'erreur.


4 Réponses :


2
votes

dans la boucle interne, vous définissez une contrainte au mauvais compteur. Au lieu de:

for (int j = 0; j < s.size()-i-1; j++)


2 commentaires

Bon endroit. Un exemple de plus pour la raison pour laquelle des noms de variables plus significatifs aident à réduire les bogues résultant de la typose (ou des variables déroutantes).


Merci, je viens de modifier le code mais le problème reste non résolu.



1
votes

Dans l'emballage Java.Util, nous pouvons:

  • collections.sort (liste); // Pour trier la liste, ex:

    Collections.sort (Arrays.Aslist (13, 4));

    • collections.addall (collection c, t ... éléments); // Pour rejoindre la liste, ex:

      collections.addall (arranges.aSlist (13, 4), tableaux.Aslist (3,4,5));

      Vous n'avez donc plus besoin d'écrire votre propre fonction.


1 commentaires

Je ne peux pas utiliser les collections.sort en raison de la restriction des devoirs :(



0
votes

Pouvez-vous ajouter peu de relevés System.out. Cela vous aidera à voir où l'erreur. Je soupçonne les données du fichier.


0 commentaires

0
votes

Le problème que vous rencontrez peut être dans la ligne ci-dessous. Dans la méthode READNONJUPASFILE ET READJUPASFILE

if (splitarray.length > 1) {
   String firstentry = splitarray[0];
   String secondentry = splitarray[1];
}


3 commentaires

Énorme merci. Résolu l'erreur


Veuillez accepter cette réponse.


S'il vous plaît vérifier ce lien - Stackoverflow.com/help/someone-answers