Methoden methode gibt array bound exeption

toblo

Mitglied
Methode befindet sich in einer Klasse.
Java:
public void winn(int[][] gewonnen){
    if(gewonnen[0][0]==1 && gewonnen[1][0]==1 && gewonnen[2][0]==1){
      this.win = 1;
    }else if(gewonnen[1][0]==1 && gewonnen[1][1] == 1 && gewonnen[1][2]==1){
      this.win = 1;
    }else if(gewonnen[2][0]==1 && gewonnen[2][1] == 1 && gewonnen[2][2] == 1){
      this.win = 1;
...
    }

Der Aufruf der Methode:

Java:
    int[][] donaii = new int[2][2];
    donaii[0][1] = 2;
    don.winn(donaii);
    System.out.println(""+don.getwin());

Fehler:
Exception in thread main java.lang.ArrayIndesOutofBoundsExeption : 2


Wo liegt mein Fehler? (Semantik)
 
Dein Array hat keinen Index 2. Du erstellst ein Array dass die Länge 2 hat, also gibts da die Indices 0 und 1.
 
Java:
    int[][] donaii = new int[2][2];

Java:
    if(gewonnen[2][0] ...

Diese 2 Zeilen passen nicht zusammen!
Überleg, was
Code:
new int[2]
bedeutet, und dann zähl mal mit den Fingern nach.

(Außerdem hast du massenhaft undefinierte Werte in deinem Feld. Solltest dich drum kümmern.)
 
Zuletzt bearbeitet:
Nee, ich meinte genau das.

Ich hab mir halt angewöhnt, diese Felder zu initialisieren.

Genauso, wie der Compiler ablehnt:
Java:
int i;
int a;
a=i;    // ERROR!
sollte er meiner Meinung anch ablehnen:
Java:
int i[10];
int a;
a=i[1];  // (leider) kein Error

Ja, ich weiß, dass er's nicht macht. Aber IMHO sollte er.
Deshalb schreib ich ja auch nur, (der Programmklarheit wegen):
(Sollte toblo sich drum kümmern.)
 
Also dein Code lässt sich nicht kompilieren, also kommt doch nen Error 😉
Und wenn du schreibst:
Java:
int i[];
int a;
a = i[0];
Dann gibts natürlich auch den Fehler aus deinem ersten Code 😉

Was sollte denn deiner Meinung nach in einem frisch initialisierten int[] Array liegen wenn keine Defaultwerte?
 
Also dein Code lässt sich nicht kompilieren, also kommt doch nen Error 😉
Und wenn du schreibst:
Java:
int i[];
int a;
a = i[0];
Dann gibts natürlich auch den Fehler aus deinem ersten Code 😉

Was sollte denn deiner Meinung nach in einem frisch initialisierten int[] Array liegen wenn keine Defaultwerte?

Ich bin der Meinung, dass
Code:
int i[10]
instanziiert, aber nicht initialisiert ist.
Die Array-Variable selbst ist initialisiert, aber die Werte sind nur instanziiert, ohne Inhalt.
Wenn hier stünde
Code:
String s[10]
, dann kämest du auch nicht auf die Idee, dass s[x] mit dem Wert "" initailisiert wäre. Sondern aller Werte von s[] sind undefiniert NULL.

Logisch, dass bei deinem Beispiel
Code:
int i[];
ein Fehler kommt. Da ist ja nicht mal die Arraygröße fix.
Mein Beispiel war aber
Code:
int i[10];
.

Leider kommt bei meinen Beispielen beim primitive
Code:
a=i;
sehrwohl der Fehler "i nicht initialisiert", aber bei
Code:
a=i[1];
KEIN Fehler.
 
Zuletzt bearbeitet:
Mit
Code:
int[] i
deklarierst du die Variable, initialisierst oder instantiierst die aber nicht.

Java:
String s[10]
Das lässt sich nicht kompilieren. Meinst du vielleicht
Code:
String[] s = new String[10];
? Dann hast du s doch initialisiert und kannst das nicht mit
Code:
String s;
vergleichen.
In einem frisch initialisierten String Array ist per default alles null, so wie in jedem anderen Objekt Array. Bei primitiven gibts kein null, da ist alles 0 bzw. 0.0.

Leider kommt beim primitive a=i sehrwohl der Fehler "i nicht initialisiert", aber bei a=i[1] KEIN Fehler.
Doch, wenn du i nicht initialisierst kommt sehrwohl der selbe Fehler.
 

Zurück
Oben