if then else geht nicht

Michi_1989

Mitglied
Hiho,

ich habe gerade ein Problem mit ner If then else Abfrage.
Es soll eine selbst geschriebene Fehlermeldung erscheinen, wenn das Array voll ist. Aber er haut immer den out of bound error raus. Ich hoffe das liegt nicht an meiner wilden Methodenübergabe. Habe die Stelle unterstrichen.

Vielen Dank im Voraus.

Java:
package uebung7;

public class Uebung7 {

        
public enum Studiengang {WINF , INF, MINF, MT, GET};

 //Prüfungen zufällig bestanden/nicht bestanden.
public static void Pruefungen () {
 
        int Menge = 0, AnzahlPruef = 0;
	System.out.print("hat Prüfung: ");

        for (int k = 0; k < 32; ++k)
            {
            Menge = Menge << 1;
            Menge = Menge + (int)(Math.round(Math.random()));
            }

            for (int l = 0; l < 32; ++l)
		{
                if (Menge % 2 == 1)
                {
                System.out.print((32-l)+" ");
                ++AnzahlPruef;
                
                }
                Menge = Menge >>> 1;
		}
                System.out.print("bestanden \nund somit "+AnzahlPruef+" von 32 Prüfungen geschafft.\n");
    
}

// Vor- Nachnamen erstellen und den Studenten zufällig zuordnen.(Denkt euch nichts bei den Namen. Fand die cool. ^^)
public static void Namen (){
    
    char [][] Vornamen = {{'S','u','s','a','n'},{'R','o','l','a','n','d'},{'E','d','d','i','e'},{'S','u','s','a','n','n','a','h'},
                         {'M','a','r','i','u','s'},{'R','o','s','a','l','i','n','d'},{'M','i','c','h','a','e','l'},{'C','u','t','h','b','e','r','t'},
                         {'L','i','s','a'},{'E','z','i','o'}};

    char [][] Nachnamen = {{'D','e','l','g','a','d','o'},{'D','e','s','c','h','a','i','n'},{'D','e','a','n'},{'H','o','l','m','e','s'},
                          {'A','u','d','i','t','o','r','e'},{'M','o','r','t'},{'I','p','m','a','n'},{'S','i','n','c','l','a','i','r'},
                          {'F','l','a','k'},{'C','a','r','t','m','a','n'}};
    
    {
    int n = (int) (100*Math.random()%10);
    int m = (int) (100*Math.random()%10);
    System.out.print(Vornamen[n]);
    System.out.print(" ");
    System.out.println(Nachnamen[m]);
    }
   
}
//public static void Alter(int studentenarray[]){
 //int i=1, max=0, min=0;
 //float sum=0;
    
  //  int n=studentenarray[5];     	
  //      sum=sum+n;
  //      if (i==1) 
  //          {
  //          max=n;
  //          min=n;
  //          }
  //          if (n>max) max=n;
  //          if (n<min) min=n;
  //          ++i;  
//}

public static void Studenteninit (int [][] stud, int counter,int i){
    Studiengang a = Studiengang.WINF;  
    
    //Zufallswerte zuordnen, Schleife über s Studs.
    for ( i=0 ; i!=counter;++i){ 
                                                                                
        stud[i][0] = (int) (10000+9583*Math.random()); //5-stellige  Zahlen
        stud[i][1] = (int) (1980+10*Math.random()); // geb. ab 1980
        stud[i][2] = (int) (1+100*Math.random()%12); //Werte 1...12
        stud[i][3] = (int) (1+100*Math.random()%30); // Werte 1..30


        stud[i][5] = (int) ((2011*365+11*30+07)-(stud[i][1]*365+stud[i][2]*30+stud[i][3]))/365; // Alter mit Array berechen

        // Studiengang zufällig zuordnen.
        int t =(int) (Math.random()*5);
    
        switch(t){
            case 0 : a = Studiengang.WINF; stud[i][4] = 2;                     
            break;
            case 1 : a = Studiengang.INF; stud[i][4] = 2;                
            break;
            case 2 : a = Studiengang.MINF; stud[i][4] = 2;
            break;
            case 3 : a = Studiengang.MT; stud[i][4] = 1;
            break;
            case 4 : a = Studiengang.GET; stud[i][4] = 1;
            
      
        }
    }  
   System.out.println("\nStudiengang: "+ a);
}

public static void NeuerStud(int Anzahl, int [][] stud,int counter){
    int Arraypruef =0;
    for (int i=25; i!=Anzahl+25; ++i ){
       [U] if (Arraypruef!=25)[/U]
        {
        Studenteninit(stud,counter,25);
        System.out.println("Matr: " + stud[i][0]);
        System.out.println("Geb: " + stud[i][3] + "."+ stud[i][2]+"."+stud[i][1]);
        System.out.println("FB: "+stud[i][4]);
        System.out.println("Alter: "+stud[i][5]);
        Namen();
        Pruefungen();
        ++Arraypruef;
        }
        else System.out.println("Es wurde ein Student zuviel im Array angelegt!");
          
    }
}

public static void main(String[] args) {
   
    int [][] stud = new int  [50][6];
    int counter;
    
    for (int i = 0; i<25;++i){
        
        Studenteninit (stud,25,0);
        System.out.println("Matr: " + stud[i][0]);
        System.out.println("Geb: " + stud[i][3] + "."+ stud[i][2]+"."+stud[i][1]);
        System.out.println("FB: "+stud[i][4]);
        System.out.println("Alter: "+stud[i][5]);          
        Namen();
        Pruefungen();
    }
    
    NeuerStud(26,stud,51); // Anzahl ändern : 1.Wert (1-25), 3. Wert (26-50)jeweils um einen erhöhen.
}     
      
	    

           
                        
                          
                 
           
                
                      
//        Alter();
//        System.out.println("\n\nÄltester: "+max +"\tJüngster: "+min +"\tDurchschnittsalter: "+sum/50);



}
 
Das sieht wirklich völlig wild aus.
Wieso fängt dein Schleifenzähler bei 25 an?
Wieso übergibst du 25 an die Studenteninit-Methode als i und weist diesem Parameter dann sofort 0 zu?
 
Die Schleife fängt bei 25 an, da ich ab der 25 Stelle des Arrays schreiben will, da ja meins Wissens von 0-25 überschreiben wird. Mir fällt da aus der Vorlesung gerade ein, dass in der Methodenübergabe ja nur der Verweis aus Array ist, oder? Dann wäre das ja wirklich ein wenig sinnfrei. Gut das mit i = 0 hätte ich mir wirklich sparen können. Obwohl ich nich weiß ob das sonst funktionier. Wie du wohl erkennen kannst, sollen 25 automatisch erzeugt werden und dann mit einer neuen Methode sollen dann neue Studenten hinzugefügt werden. Allerdings soll wie gesagt eine Fehlermeldung bei 51 Studenten erscheinen. Liegt das nun an meiner wilden Methodenübergabe oder habe ich sonst irgentwas vermurkst ? ^^
 
Zuletzt bearbeitet:
Gibt es irgendeinen Grund warum Studenten bei dir keine eigene Klasse sind und du stattdessen mit nichtssagenden zweidimensionalen Arrays herumhantierst?
 
Jo gibt es. Die Umstellung auf Klassen kommen später. Die Aufgabe ist erst einmal die main durch Methoden zu säubern. Und das mit dem Array war auch Aufgabenstellung
 
Die Schleife fängt bei 25 an, da ich ab der 25 Stelle des Arrays schreiben will, da ja meins Wissens von 0-25 überschreiben wird.

Ahja, und wenn mal nicht 25 Studenten automatisch angelegt werden sollen, schreibst du dann deinen Code wieder komplett um oder wie?

Deine Methode ist angefangen beim Namen ("NeuerStud" was soll das, bist du schreibfaul oder was?) bis zur letzten Klammer kompletter Murks.
Am besten markieren und löschen.

Verwende keine festen Werte und auch keine "!=" Vergleiche. Beides brauchst du nicht.
 
Hmm, nun ja da man ja nur lt. Aufgabenstellung 25 automatisch erzeugen sollte, ging ich davon aus, dass man es so machen kann. Echt so Mist? War froh, dass das bis auf die eigene Fehlermeldung geklappt hat... Aber kannst du mir vielleicht noch meine Ursprungsfrage beantworten? Aus welchem Grund geht die If then else Abfrage denn nun nicht ?
 
Aber müsste er dann nicht beim nächsten Durchlauf in die else Anweisung gehen und mir meine Fehlermeldung ausgeben? Habe doch in der Main die Methode mit einem Durchlauf mehr aufgerufen, als das Array groß ist.
 
Dein ungleich-Vergleich macht weder in der for-Schleife wie auch im if keinen Sinn.

Verwende "<,>,<=,<=" Vergleiche.

Und gib den Variablen und Methoden ordentliche Namen.
 

Neue Themen


Zurück
Oben