ArrayIndexOfBound

Status
Nicht offen für weitere Antworten.

Spin

Top Contributor
Hey Leute , kann mir jemand helfen?

Java:
public static void main(String[]args){

        /*Anzahl der Spieltage, für 4 Manschaften gibt es 24 Spiele*/
        int n = 4; // Anzahl der Manschaften
        int g = (n * (n - 1)) * 2;
        Team league[] = new Team[4];
        league[0] = new Team("Hansa Rostock", 50);
        league[1] = new Team("Bayern München", 80);
        league[2] = new Team("Vfb Lübeck", 20);
        league[3] = new Team("FC St. Pauli", 10);
        
 
        /* Schleife vom ersten Spieltag bis zum letzten*/
        for(int i=0; i<g;i++){
                System.out.println((i+1) + ". Spieltag");

                for (int j=0;j<league.length;j++){
                /* In den Paaren sind die Werte von 0 bis zu Anzahl der Manschaften enthalten*/
                Pair games[] = GameDayPlanner.getGameDayPairs(i+1, g); // Rückgabe von Spielpaaren 
                int first  = games[j].getFirst();
                int second = games[j].getSecond();
                System.out.println("Heute spielt " + league[first].getName() + " gegen " +  league[second].getName()+ ".");
                league[first].playAgainst(league[second]);
                }
        }

Ich bekomme ständig die ArrayIndexOf Bound Exception.
Pair games[] bekommt ein Array aus einer anderen Klasse zurück.
Um dieses zu bekommen werden die Spieltage von 1 - i übergeben und die Anzahl aller möglichen Partien.
Nun möchte ich mit einer anderen schleife die Paare holen und den ersten gegen den zeiten spielen lassen.

Die Paare sind durch result[pairCount] = new Pair(i,j); deklariert.
Das heißt in meinen Array sind in einem [] das Paar drin. Mit getFirst hole ich die erste in dem anderen die zweite Manschaft.

Die Paare werden jeden Spieltag neu berechnet und es kommen auch keine doppelte vor. Das klappt alles soweit. Nun verstehe ich nicht , warum es jetzt hier nicht weitergeht.

Danke

Java:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 21
        at uebungsblatt04.LeagueSimulation.main(LeagueSimulation.java:35)
Java Result: 1
 

javimka

Top Contributor
Ich tippe einfach mal darauf, dass zu einer gewissen Zeit j grösser ist, als das Array games[]. Wie sieht denn die Methode GameDayPlanner.getGameDayPairs(i+1, g); aus?
 

Spin

Top Contributor
Java:
run:
1. Spieltag
2
21
4
19
6
17
8
15
2. Spieltag
0
2
1
23
3
22
5
20
3. Spieltag
1
3
4
0
6
21
8
19
4. Spieltag
0
6
2
4
3
23
5
1
5. Spieltag
1
7
3
5
6
2
8
0
6. Spieltag
0
10
2
8
4
6
5
23
7. Spieltag
1
11
3
9
5
7
8
4
8. Spieltag
0
14
2
12
4
10
6
8
9. Spieltag
1
15
3
13
5
11
7
9
10. Spieltag
0
18
2
16
4
14
6
12
11. Spieltag
1
19
3
17
5
15
7
13
12. Spieltag
0
22
2
20
4
18
6
16
13. Spieltag
1
0
3
21
5
19
7
17
14. Spieltag
0
3
2
1
4
22
6
20
15. Spieltag
1
4
3
2
5
0
7
21
16. Spieltag
0
7
2
5
4
3
6
1
17. Spieltag
1
8
3
6
5
4
7
2
18. Spieltag
0
11
2
9
4
7
6
5
19. Spieltag
1
12
3
10
5
8
7
6
20. Spieltag
0
15
2
13
4
11
6
9
21. Spieltag
1
16
3
14
5
12
7
10
22. Spieltag
0
19
2
17
4
15
6
13
23. Spieltag
1
20
3
18
5
16
7
14
24. Spieltag
0
23
1
22
3
20
5
18


Wow.

Java:
        int n = 4; // Anzahl der Manschaften
        int g = (n * (n - 1)) * 2;
        Team league[] = new Team[4];
        league[0] = new Team("Hansa Rostock", 50);
        league[1] = new Team("Bayern München", 80);
        league[2] = new Team("Vfb Lübeck", 20);
        league[3] = new Team("FC St. Pauli", 10);
        

        /* Schleife vom ersten Spieltag bis zum letzten*/
        for(int i=0; i<g;i++){
                System.out.println((i+1) + ". Spieltag");

                for (int j=0;j<4;j++){
                /* In den Paaren sind die Werte von 0 bis zu Anzahl der Manschaften enthalten*/
                Pair games[] = GameDayPlanner.getGameDayPairs(i+1, g); // Rückgabe von Spielpaaren Pair[]
                int first  = games[j].getFirst();
                System.out.println(first);
                int second = games[j].getSecond();
                System.out.println(second);
//                System.out.println("Heute spielt " + league[first].getName() + " gegen " +  league[second].getName()+ ".");
//                league[first].playAgainst(league[second]);
//                }
        }


Wenn ich mir die Zahlen anschauen und mein Tean[4] ist das kein Wunder das ich über 20 drüber bin.
Aber was mache ich falsch :/


Java:
  public static Pair[] getGameDayPairs(int gameDay, int teamCount)
    {
        Pair[] result = null;
        //check if the arguments are valid
        int pairCount = 0;
        if (gameDay > ((2*teamCount) - 2))
            return result;
        if (gameDay <= 0)
            return result;
        
        result = new Pair[teamCount/2];
        //get the matrix for every gameday
        int[][] matrix = calcGameDay(teamCount);
        
        //extract the pairs for the given gameDay by iterating over the whole matrix and compare the entries to the current day
        for (int i = 0; i < teamCount; i++)
        {
            for (int j = 0; j < teamCount; j++)
            {
                if (matrix[i][j] == gameDay)
                {
                    result[pairCount] = new Pair(i,j);
                    pairCount++;
                }
            }
        }
        //return the result array of pairs
        return result;
    }


Hier bekomme ich meine Paare her. Wenn ich nun i+1 übergebe. Also den aktuellen Spieltag und die Anzahl der manschaften.
Es sind 8 Werte.

Java:
1. Spieltag
2
-------
21
4
-------
19
6
-------
17
8
-------
15

Hiebei sollen jetzt 21 gegen 4 spielen, die 19 gegen die 6.
Aber warum bekomme ich solch komische Werte.
Andersrum wenn ich solche bekomme, wie kann ich es machen ohne es explizit in das Array von Team zu schreiben. Damit meine ich : league[0]

0 gibts nicht, aber die 17 ...dann muss ich das j der league übergeben, ......irgendwie haut das alles nicht so hin :/
 
Status
Nicht offen für weitere Antworten.

Oben