# 2 Konstruktoren



## Bierhumpen (7. Jan 2006)

also ich habe eine aufgabe bekommen in der steht dass ich in eine Klasse 2 konstruktoren schreiben soll...

wie soll das bitte gehen?!

Hab ich noch nie von gehört


----------



## SlaterB (7. Jan 2006)

```
public class Test() {

    public Test() {
        System.out.println("Standardkonstruktor ohne Parameter");
    }

    public Test(String st) {
        System.out.println("Konstruktor mit String-Parameter: "+st);
    }



   public static void main(String[] args) {
       Test t1 = new Test();
       Test t2 = new Test("Hello World");
   }

}
```

unwiderlegbar zwei Konstruktoren


----------



## Lim_Dul (7. Jan 2006)

Eine Klasse kann beliebig viele Konstruktoren haben. Sie müssen alle nur unterscheidbar sein.

Beispiel:


```
public class TestKlasse {
  private int value;

  public TestKlasse() {
    value = 0; // Setze Value auf einen Default Wert
  }

  public TestKlasse(int value) {
    this.value = value; // Setze Value auf den übergebenen Wert
  }
}

...

// Irgendwo im code
TestKlasse test1 = new TestKlasse();
TestKlasse test2 = new TestKlasse(42);
```

2 Konstruktoren mit gleicher Paramterliste gehen nicht, aber ansonsten kannst du beliebig viele Konstruktoren definieren.


----------



## Bierhumpen (7. Jan 2006)

Ah... also unterscheiden die sich dann nur durch die weitergabe der parameter...

okay, dann hätt ich da noch eine frage, damit ich nicht noch nen thread aufmache...

Ich will ein hotel bauen, dass mithilfe eine for Schleife die anzahl der zimmer bestimmt. Sagen wir mal 15.

Wie kann ich jetzt sagen dass er 15 neue Objekte vom typ Zimmer macht?
wir kann ich den variablen dann eine nummer zuordnen?! also zimmer1 zimmer2.......
So klappts jedenfalls nicht


```
for (int i=1, i<=15, i++){
        Zimmer zimmer[b]i[/b] = new Zimmer();
    }
```


----------



## Guest (7. Jan 2006)

```
Zimmer alleZimmer[] = new Zimmer[15];
for(int i=0; i<alleZimmer.length; i++) {
  alleZimmer[i] = new Zimmer();
  ...
}
```


----------



## Bierhumpen (7. Jan 2006)

hm hm. ist dann ja nen array..

kann ich dann bspw. auf zimmer[1].hatBadewanne(); zugreifen? oder iwe kann ich dann auf die einzelenen objete zugreifen?!


----------



## Guest (7. Jan 2006)

Bierhumpen hat gesagt.:
			
		

> kann ich dann bspw. auf zimmer[1].hatBadewanne(); zugreifen?


Zimmer mit Badewanne? Ziemlich dekadent  
Ja, du kannst auf das Array über Index zugreifen.


----------



## SnooP (7. Jan 2006)

Ne andere Möglichkeit ist die Verwendung von Collections wie ne ArrayList oder Vector oder dergleichen. Dabei ist die Menge an Zimmern im Hotel nicht auf eine feste Größe begrennzt und es können über add-Methoden später noch Zimmer hinzukommen... 

Der Zugriff auf die einzelnen Elemente einer solchen Liste geschieht häufig über Enumerations oder Iterator ... schau mal in der API nach oder in entsprechenden Büchern...

für deine Zwecke wird aber vermutlich erstmal nen Array reichen...


----------



## Bierhumpen (7. Jan 2006)

das mit der badewanne war auch nur ein bespiel 

Aber danke für den hinweis ich versuchs mal....


----------



## Bierhumpen (7. Jan 2006)

Würde das so funktionieren?!


```
public class Hotel {
    
    String hotelname;
    int anzahlZimmer;
    boolean istInInnenstadt;
    boolean hatEineBar;
    Zimmer alleZimmer[] = new Zimmer[anzahlZimmer];;

    Hotel(String hotelname, int anzahlZimmer, boolean istInInnenstadt,
          boolean hatEineBar){
            
        //uebergebene Variablen werden in die Klassenvar. geschrieben
        this.hotelname = hotelname;
        this.anzahlZimmer = anzahlZimmer;
        this.istInInnenstadt = istInInnenstadt;
        this.hatEineBar = hatEineBar;
        
        //alle Zimmer werden erstellt.
        for(int i=1; i<alleZimmer.length; i++) { 
            this.alleZimmer[i] = new Zimmer(false,true,i); 
        }
    }
    
}
```


----------



## L-ectron-X (7. Jan 2006)

```
public class Hotel { 
    
    private String hotelname; 
    private boolean istInInnenstadt; 
    private boolean hatEineBar; 
    private Zimmer[] alleZimmer;

    Hotel(String hotelname, int anzahlZimmer, boolean istInInnenstadt, 
          boolean hatEineBar){ 
            
        //übergebene Argumente werden in die Instanzvar. geschrieben 
        this.hotelname = hotelname;  
        this.istInInnenstadt = istInInnenstadt; 
        this.hatEineBar = hatEineBar;
        alleZimmer = new Zimmer[anzahlZimmer] ;
        
        //alle Zimmer werden erstellt. 
        for(int i=0; i<alleZimmer.length; i++) { 
            this.alleZimmer[i] = new Zimmer(false, true, ++i); 
        } 
    }

    public int getAnzahlZimmer() {
        return alleZimmer.length;
    }

    //etc.   
}
```


----------



## Bierhumpen (7. Jan 2006)

also sollte man die for schleife aus "schönheits"gründen ab 0 beginnen lassen... oder hat das noch einen tieferen sinn?

das mit der zimmerzahl hab ich jetzt auch geschnallt...


----------



## Guest (7. Jan 2006)

Bierhumpen hat gesagt.:
			
		

> also sollte man die for schleife aus "schönheits"gründen ab 0 beginnen lassen... oder hat das noch einen tieferen sinn?


Es ist bei allen C-ähnlichen Sprachen so. Perl, PHP, C/C++, Java, Python usw.
Stell dir den Index als eine Lesemarke vor, die VOR dem aktuell zu lesenden Element des Arrays steht.
Um den ersten Eintrag zu lesen plazierst du die Lesemarke an Position 0. Beim letzten bei n-1, wobei n 
die Länge des Arrays ist.
Ich würde dir empfehlen zuerst ein dickes Grundlagenbuch mit Beispielen etc. durchzugehen. Deine Fragen 
lassen darauf schliessen, dass du dich mit Java bzw. mit Programmierung allgemein erst seit kurzem 
beschäftigst. Du wirst immer wieder auf solche Probleme stossen, solange du die Grundlagen nicht drauf
hast. Learning by doing ist erst der nächste Schritt.


----------



## Bierhumpen (7. Jan 2006)

ne ist schon klar.. ich wollte das eigentlich von 1 - ... laufen lassen. dabei hätte ich aber oben <= schreiben müssen, das ist glaube ich das missverstöndniss. Damit für i=1 auch Zimmer 1 gemeint ist


----------



## Lim_Dul (7. Jan 2006)

Bierhumpen hat gesagt.:
			
		

> also sollte man die for schleife aus "schönheits"gründen ab 0 beginnen lassen... oder hat das noch einen tieferen sinn?
> 
> das mit der zimmerzahl hab ich jetzt auch geschnallt...


Wenn du schreibts

```
alleZimmer = new Zimmer[anzahlZimmer] ;
```
Dann erzeugt dir Java ein Array, dass von alleZimmer[0] bis alleZimmer[anzahlZimmer-1] geht

Wenn deine Schleife von i=1 bis i<=anzahlZimmer gegangen wäre, hättest du beim Zugriff auf alleZimmer[anzahlZimmer] eine ArrayOutOfBoundException bekommen (oder eine Ähnliche)


----------



## Bierhumpen (8. Jan 2006)

problem gelöst ... [close]


----------

