frage zu meinem quellcode

  • Themenstarter Themenstarter habkeinen
  • Beginndatum Beginndatum
H

habkeinen

Gast
Java:
public class Belegungsplan {
	
		public static final int ANZAHL_TAGE =5;
		public static final int ANZAHL_BLOECKE = 6;
		private String [][] plan = new String [ANZAHL_BLOECKE][ANZAHL_TAGE];
		private String name; //raumname
		
		// initiert einen Belegungsplan für den angegebenen Raum
		
		public Belegungsplan(String raumname){
			
			this.name=raumname; // Raumname wird erstellt.
				
		}
		
		//reserviert den angebenen Termin Für die Reservierung wird angegebene Beschreibung eingetragen.
		// Tag und Block werden ab 1 gezählt
		
		public void reservieren(int tag , int block , String beschreibung){
			
			plan[block][tag]= beschreibung;
			
		}
		
		//löscht eine Reservierung für den angegebenen Termin
		
		public void loeschen(int tag , int block){
			
			plan[block][tag] = null;
			
		}
		
		// prüft ob Termin nicht reserviert ist.
		
		public boolean istFrei (int tag, int block){
			if(plan[block][tag]==null){
				return true;
			}else{
				return false;
			}
			
			
		}
		
		//liefert für den Termin die eingetragene beschreibung
		
		public String beschreibung(int tag, int block){
			String fach;
			fach = plan[block][tag];
			return fach;
		}
		
		// gibt belegung textuell aus,
		// belegete blöcke mit beschreing bei keiner belegung -> keine reservierung
		
		public void ausgeben(){
				
			System.out.println("Reservierung für Raum" + name);
			
			
			
			for(int i=0;i<ANZAHL_BLOECKE;i++){
				for(int j=0;j<ANZAHL_TAGE;j++){
					if(plan[i][j]==plan[i][1]){
						System.out.println("Montag");
					}
					if(plan[i][j]==plan[i][2]){
						System.out.println("Dienstag");
					}
					if(plan[i][j]==plan[i][3]){
						System.out.println("Mittwoch");
					}
					if(plan[i][j]==plan[i][4]){
						System.out.println("Donnerstag");
					}
					if(plan[i][j]==plan[i][5]){
						System.out.println("Freitag");
					}
					if(plan[i][j]==plan[1][j]){
						System.out.println("1.");
					}
					if(plan[i][j]==plan[2][j]){
						System.out.println("2.");
					}
					if(plan[i][j]==plan[3][j]){
						System.out.println("3.");
					}
					if(plan[i][j]==plan[4][j]){
						System.out.println("4.");
					}
					if(plan[i][j]==plan[5][j]){
						System.out.println("5.");
					}
					if(plan[i][j]==plan[6][j]){
						System.out.println("6.");
					}
					if(plan[i][j]==null){
						System.out.println("keine Reservierung");
					}else{
						System.out.println(plan[i][j]);
					}
				}	
			}
			
		}
	}

Oben meine geschriebene Klasse für die Ausführende Klasse siehe unten

Java:
public class BelegungsplanBsp {

	
	public static void main(String[] args) {
		Belegungsplan c07 = new Belegungsplan("C07");
		c07.reservieren(1, 2, "Prog2");
		c07.reservieren(1, 3, "Prog2");
		c07.reservieren(2, 4, "Mathe2");
		c07.reservieren(3, 1, "BWL");
		c07.reservieren(3, 2, "BWL");
		c07.reservieren(4, 1, "Mathe2");
		c07.reservieren(5, 6, "Prog2");
		c07.loeschen(3, 2);
		c07.loeschen(3, 1);
		c07.ausgeben();
		
		
		Belegungsplan aula = new Belegungsplan("Aula");
		aula.reservieren(2, 6, "Mathe2");
		aula.reservieren(2, 1, "Prog2");
		aula.ausgeben();
		

	}
	
/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 * erwartete Ausgabe: 
 * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  Reservierung für Raum C07
  Montag:
    2. Block: Prog2
    3. Block: Prog2
  Dienstag:
    4. Block: Mathe2
  Mittwoch:
    keine Reservierung
  Donnerstag:
    1. Block: Mathe2
  Freitag:
    6. Block: Prog2

Reservierung für Raum Aula
  Montag:
    keine Reservierung
  Dienstag:
    1. Block: Prog2
    6. Block: Mathe2
  Mittwoch:
    keine Reservierung
  Donnerstag:
    keine Reservierung
  Freitag:
    keine Reservierung
 
 * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
	
	
	
	
}

nun meine Frage wo ist mein Fehler bzw was muss ich noch machen um es zum laufen zu bekommen?
 
Hm. Kompilieren, Ausführen und Fehler lesen! Falls es denn eine gibt. Und dann diesen hier rein kopieren!

Edit: Oder selbst mal Google anschmeißen...
 
Die Abfragen beim dem Ausgeben sehen komisch aus... Falls ich mich nicht täusche kannst du auch einfach
Code:
if (j==3)...
abfragen. Außerdem sind ja viele Sachen "null" und null=null ist häufig wahr.
 
Hi,

bekommst du denn eine Fehlermeldung? Wenn ja, poste sie mal. Ich glaube kaum, dass jemand Lust hat, den gesamten Quellcode durchzulesen.
 
TIPP: Array-Indices fangen bei 0 an, nicht bei 1!!

Edit: Da sind aber noch einige Fehler mehr drin, das Array-Index-Problem
musste aber erstmal beheben damit es überhaupt abläuft.
 
Zuletzt bearbeitet von einem Moderator:
Wie bereits erwähnt, Indizes fangen bei 0 an, daher auch die ArrayIndexOutOfBounds Exception.
Auch vom grundlegenden Design würde ich es anders angehen und nur eine Liste mit Reservierungen speichern inklusive der Informationen um welchen Tag und Block es sich handelt mit der Beschreibung.

Wie auch immer, mit dem folgend geänderten Code erhälst Du zumindest die Ausgabe, die Du haben möchtest (ich habe nur die Klasse Belegungsplan geändert, der Code im BelegungsplanBsp bleibt gleich). Ob Du dann so weitermachst oder nochmal das Design überdenkst bleibt Dir überlassen ;-)

Java:
public class Belegungsplan {
    
        public static final int ANZAHL_TAGE =5;
        public static final int ANZAHL_BLOECKE = 6;
        private String [][] plan = new String [ANZAHL_BLOECKE][ANZAHL_TAGE];
        private String name; //raumname
        
        // initiert einen Belegungsplan für den angegebenen Raum
        
        public Belegungsplan(String raumname){
            
            this.name=raumname; // Raumname wird erstellt.
                
        }
        
        //reserviert den angebenen Termin Für die Reservierung wird angegebene Beschreibung eingetragen.
        // Tag und Block werden ab 1 gezählt
        
        public void reservieren(int tag , int block , String beschreibung){
            
            plan[block-1][tag-1]= beschreibung;
            
        }
        
        //löscht eine Reservierung für den angegebenen Termin
        
        public void loeschen(int tag , int block){
            
            plan[block-1][tag-1] = null;
            
        }
        
        // prüft ob Termin nicht reserviert ist.
        
        public boolean istFrei (int tag, int block){
            if(plan[block-1][tag-1]==null){
                return true;
            }else{
                return false;
            }
            
            
        }
        
        //liefert für den Termin die eingetragene beschreibung
        
        public String beschreibung(int tag, int block){
            String fach;
            fach = plan[block-1][tag-1];
            return fach;
        }
        
        // gibt belegung textuell aus,
        // belegete blöcke mit beschreing bei keiner belegung -> keine reservierung
        
        public void ausgeben()
        {
            System.out.println("Reservierung für Raum " + name);
            
            for (int i = 0; i < ANZAHL_TAGE; i++)
            {
                if(i == 0)
                {
                    System.out.println("Montag");
                }
                else if(i == 1)
                {
                    System.out.println("Dienstag");
                }
                else if(i == 2)
                {
                    System.out.println("Mittwoch");
                }
                else if(i == 3)
                {
                    System.out.println("Donnerstag");
                }
                else if(i ==4)
                {
                    System.out.println("Freitag");
                }
                
                boolean keineReservierung = true;
                
                for (int j = 0; j < ANZAHL_BLOECKE; j++)
                {
                	if (plan[j][i] != null && plan[j][i] != "")
                	{
                		System.out.println("\t" + (j+1) + ". Block: " + plan[j][i]);
                		keineReservierung = false;
                	}
                }
            	if (keineReservierung)
            	{
            		System.out.println("\tKeine Reservierung");
            	}
            }

            System.out.println("");
        }
    }
 
Java:
nun meine Frage wo ist mein Fehler bzw was muss ich noch machen um es zum laufen zu bekommen?[/QUOTE]


Also, ich war mal so freundlich :-) und habe den Code kurz compiliert. Dabei habe ich folgenden Fehler entdeckt: Dein Konstruktor für den Belegungsplan erzeugt einen Plan für 5 Tage und maximal 6 Blöcken. Somit verursacht die Zeile c07.reservieren(5, 6, "Prog2"); eine ArrayIndexOutOfBoundsException. In Java sind die Array-Index immer zero-based, d.h. in Deinem Fall beginnt der Montag mit 0 und der Freitag endet mit 4., analoges gilt für die Blöcke. Nachdem ich die Indexierung korrigiert habe, ist die Ausgabe von ausgeben() wie folgt:

[quote]
Montag
Dienstag
Mittwoch
Freitag
1.
4.
5.
6.
keine Reservierung
... usw
[/QUOTE]

Die Semantik in der Ausgabe habe ich nicht angeschaut, diese scheint jedoch nicht korrekt zu sein.
 
Zuletzt bearbeitet von einem Moderator:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
at aufgabe3_miniprojekt_1.Belegungsplan.reservieren(Belegungsplan.java:23)
at aufgabe3_miniprojekt_1.BelegungsplanBsp.main(BelegungsplanBsp.java:17)
 
Da kräuseln sich mir die Fußnägel:

Java:
public boolean istFrei (int tag, int block){
   if(plan[block][tag]==null){
      return true;
   }else{
      return false;
   }
}

Was spricht gegen...
Java:
public boolean istFrei (int tag, int block){
   return plan[block][tag]==null;
}
...?

Außerdem:
Java:
private final String[] TAGE = {"MONTAG","DIENSTAG","MITTWOCH","DONNERSTAG","FREITAG"};

...

    for(int i=0;i<ANZAHL_BLOECKE;i++){
                for(int j=0;j<ANZAHL_TAGE;j++){
                      System.out.println(TAGE[j]);
                      System.out.println((i+1) + ".");
                      ...
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben