# Objektorientierung Konstruktor



## babuschka (24. Mrz 2012)

```
public class Zimmer { 
private int qm; 
private int Miete; 
private String Adresse; 
   
// hier fehlt der Konstruktor (vgl. Aufgabe 12.a.)
   
public int getMiete() 
 { 
    return Miete; 
 } 
   
public void setMiete() 
 { 
    this.Miete = Miete; 
 } 
   
public int getQM() 
 { 
    return qm; 
 } 
   
// hier fehlt die Methode zur Rückgabe der Adresse (vgl. Aufgabe 12.b.)
   
} 
Die Klasse Wohnungsmarkt ist wie folgt vorgegeben: 
public class Wohnungsmarkt { 
private Zimmer w_Array [] = new Zimmer [5]; 
   
public Wohnungsmarkt(){ 
w_Array [0] = new Zimmer(23, 210, "Holländischer Platz 9"); 
    w_Array [1] = new Zimmer(24, 220, "Kurt-Wolters-Str. 3"); 
    w_Array [2] = new Zimmer(18, 170, "Wilhelmshöher Alle 71"); 
    w_Array [3] = new Zimmer(15, 200, "Menzelstr. 13"); 
    w_Array [4] = new Zimmer(10, 100, "Murhardstr. 2"); 
 } 
   
public Zimmer [] zimmerSuchen(){ 
return w_Array; 
 } 
}
```

*Hey Leute wenn ich hier die Klasse "Zimmer" um einen Konstruktor erweitern soll, der als Parameter die Werte für alle Klassenvariablen enthält und diese dann initialisiert, dann wäre doch mein Konstruktor*:

1.Möglichkeit
public Zimmer(int qm, int Miete, int Adresse)
{
this.qm=qm;
this Miete=Miete;
this Adresse=Adresse;
}


Allerdings soll auch die Möglichkeit gehen:
2.Möglichkeit:

public Zimmer (int q, int M, int A)
{

qm=q;
Miete=M;
Adresse=A;
}


Ich versteh nicht so ganz den Unterschied zwischen den beiden Varianten. Wenn ich "this"(1.Möglichkeit) benutze so kann ich alles von der Klasse abschreiben, benutzen ich jedoch kein "this"(2.Möglichkeit) so muss ich die Parameter im Konstruktor(in der Klammer vom Konstruktor) abkürzen bzw. anders nennen , als sie in der Klasse heißen.

Kann ich das immer freiwillig entscheiden, ob ich ein "this" benutze oder nicht?Falls nicht , woran erkennt man sowas, ob jetzt ein "this" mitzubenutzen ist oder nicht?

Hofffe ihr könnt mir helfen!


----------



## AlexSpritze (24. Mrz 2012)

Mit 
	
	
	
	





```
this.
```
 beziehst du dich immer explizit auf die Member der aktuellen Klasse (d.h. auch, in statischen Methoden kannst du this nicht benutzen).
Wenn du in einer Methode Parameter hast, die genauso heißen wie Membervariablen, dann greifst du mit diesem Namen auf die Parameter zu und nicht auf die Member-Variablen. Das geht dann wiederum explizit mit 
	
	
	
	





```
this.
```
.

Beispiel, man sieht sehr oft sowas wie:


```
public class Class1 {
 private final String name;

 public Class1(String name) {
 this.name = name; // Parameter name der Member-Variable name zuordnen
    // hier muss man explizit this benutzen
 }

 public String getName(){
    return name;
    // es ging aber ebenso gut return this.name; da hier keine entsprechende Verdeckung besteht.
 }
}
```


----------



## babuschka (24. Mrz 2012)

Also wir müssen nur leichte Konstruktoren erstellen...
Aber ich weiss immer noch nicht wann , das "this " zu benutzen ist und wann nicht.
Weil ein this macht die Sache einfacher , man muss halt dann die Parameter im Konstruktor nicht abkürzen und so.
Kann man das immer selbst entscheiden oder woran sieht man das?


----------



## AlexSpritze (24. Mrz 2012)

Prinzipiell könntest du überall, wo du dich auf die Instanz-Variablen / Member-Variable der aktuellen Objektinstanz beziehst ein 
	
	
	
	





```
this.
```
 vorschreiben. Dort wo du dich auf die Parameter einer Methode oder eines Konstruktors beziehst, darfst du 
	
	
	
	





```
this.
```
 nicht schreiben, das würde auch keinen Sinn machen.


----------



## babuschka (24. Mrz 2012)

1)
gut also wenn ich mich auf die aktuelle klasse beziehe darf ich ein this benutzen?
2)
und ist das richtig, wenn ich jetzt kein this benutze dann muss ich die parameter abkürzen bzw. anders nennen,als sie in der klasse heissen?


----------



## AlexSpritze (24. Mrz 2012)

1) ja
2) ja, ... wenn du sowas im Konstruktor hast: 
	
	
	
	





```
variable = variable;
```
, dann ist das relativ sinnfrei. Das 
	
	
	
	





```
this.
```
 vor dem ersten variable gibt der Zeile Sinn


----------



## babuschka (24. Mrz 2012)

ja aber wenn ich das ohne this. mache und meine variable  z.b kontonummer ist, dann  hätte ich nicht kontonummer=kontonummer; , sondern kontonummer=kontonr;
das würde auch gehen?
also die variable kontonummer muss einmal in der klammer des KONSTRUKTERS abgekürzt/unbenannt werden und einmal hier.
das würde auch gehen?


----------



## Final_Striker (24. Mrz 2012)

ako hat gesagt.:


> ja aber wenn ich das ohne this. mache und meine variable  z.b kontonummer ist, dann  hätte ich nicht kontonummer=kontonummer; , sondern kontonummer=kontonr;
> das würde auch gehen?
> also die variable kontonummer muss einmal in der klammer des KONSTRUKTERS abgekürzt/unbenannt werden und einmal hier.
> das würde auch gehen?



Wie wäre es einfach mit ausprobieren, was geht und was nicht. ;-)


----------



## babuschka (24. Mrz 2012)

kann mir das keiner beantworten?


----------



## maki (24. Mrz 2012)

Hi,

this bezieht sich nciht auf die Klasse, sondern auf das Objekt.

Die Java Coding Conventions empfehlen, Parameter nciht zu "kürzen", sondern sie als final zu deklarieren, damit ist this auch nciht mehr optional.


----------



## babuschka (25. Mrz 2012)

```
public class ggt_eingabe2 { 
public static int zahl_einlesen(String text) { 
    int zahl = 0; 
    boolean erfolg = false; 
  Scanner scanner = new Scanner(System.in); 
  String falscheEingabe = ""; 
    // Do-While-Schleife, frage solange bis wirklich eine Zahl
eingegeben wurde
    do
    { 
   System.out.println(text); 
      try
      { 
    zahl = scanner.nextInt(); 
        // Die zahl muss ungleich 0 sein
        if (zahl > 0) 
     erfolg = true; 
        else
     System.out.println("Eingabe war <= 0!"); 
      } 
      // Exception, falls keine Zahl eingegeben wurde
      catch (InputMismatchException ime) 
      { 
        // Falsche Eingabe entfernen
    falscheEingabe = scanner.next(); 
    System.out.println("Eingabe war kein Integer!"); 
      } 
    } 
    while (!erfolg); 
     
return zahl; 
 }
```

Frage 1:
Kann mir vielleicht jemand sagen, was diese Zeile bedeutet:
"public static int zahl_einlesen(String text)"

Frage 2:r er ze
Bei dem while in der vorletzten Zeile , will man doch sagen, while(ungleich erfolge) , also wenn erfolge auftritt bricht es ab.Aber ungleich ist doch immer "!=" .....wieso steht hier denn nur ein "!"....hab das mit "!=" probiert, aber es werden nur Fehler angezeigt!


----------



## HimBromBeere (25. Mrz 2012)

> Frage 1:
> Kann mir vielleicht jemand sagen, was diese Zeile bedeutet:
> 
> ```
> ...


Dass bedeutet, dass die Methode 
	
	
	
	





```
zahl_einlesen
```
 statisch ist. Das hat den Vorteil, dass du keine Instanz deiner Klasse erstellen musst, um die Methode nutzen zu können (du kannst also schreiben 
	
	
	
	





```
GGT.zahl_einlesen()
```
), aber auch den Nachteil, dass du innerhalb dieser Methode keinerlei Instanzvariablen verwenden kannst (Klassenvariablen dagegen gehen, also solche, die ebenfalls statisch sind). Die Methode "gehört" somit zu keiner speziellen Instanz sondern zur Klasse selbst.



> Frage 2:r er ze
> Bei dem while in der vorletzten Zeile , will man doch sagen, while(ungleich erfolge) , also wenn erfolge auftritt bricht es ab.Aber ungleich ist doch immer "!=" .....wieso steht hier denn nur ein "!"....hab das mit "!=" probiert, aber es werden nur Fehler angezeigt!


Ausrufezeichen heißt nichts weiter als "nicht", 
	
	
	
	





```
!=
```
 heißt somit 
	
	
	
	





```
nicht gleich
```
, 
	
	
	
	





```
!erfolg
```
 heißt damit "
	
	
	
	





```
nicht/kein Erfolg
```
". Beides sind logische Operatoren und unabhängig voneiander verwendbar. Alternativ kannst du auch schreiben 
	
	
	
	





```
while (erfolg != true)
```
.


----------



## Gast2 (25. Mrz 2012)

zu 1:
Das ist ne statische Methode.

zu 2:
Erfolg ist dein boolean. Der wird auf true gesetzt sobald eine Zahl >0 eingegeben wurde. Daher fragst du ab: "solange wie erfolg false ist".


----------



## babuschka (25. Mrz 2012)

alles klar danke leute....
ich hab noch eine frage in java kann man doch mit "Math.randoom" zufällige zahlen auswählen lassen....
1)wo kommt diese "Math.randoom" immer hin?
2)  wie bekomme ich Zahlen 
zwischen 0-99, wie von 1-100, was ist der Unterschied bei meinem Code : wenn ich zahlen von 0-99 oder 1-100 haben will?


----------



## Final_Striker (25. Mrz 2012)

ako hat gesagt.:


> zwischen 0-99, wie von 1-100, was ist der Unterschied bei meinem Code : wenn ich zahlen von 0-99 oder 1-100 haben will?



wurde zuletzt mal erklärt: http://www.java-forum.org/java-basi...a-programm-statistik-wuerfeln.html#post880139

letzten 3 Beiträge


----------



## babuschka (25. Mrz 2012)

gut frage 2 ist geklärt
aber wo wird dieses math.randoom immer hingeschrieben?


----------



## Final_Striker (25. Mrz 2012)

ako hat gesagt.:


> aber wo wird dieses math.randoom immer hingeschrieben?



Ich verstehe den Sinn dieser Frage nicht.

Du verwendest es dort wo du es brauchst.


----------



## babuschka (25. Mrz 2012)

ein einfaches Beispiel vielleicht?
Wäre nett


----------



## timbeau (25. Mrz 2012)

Ein kompliziertes Beispiel:

```
int würfel;
Random r = new Random();
würfel = r.nextInt(6);
```


----------



## HimBromBeere (27. Mrz 2012)

Vorsicht: 
	
	
	
	





```
Math.random
```
(mit nur einem o übrigens^^) liefert eine double-Zahl zwischen 
	
	
	
	





```
0.0
```
 und 
	
	
	
	





```
1.0
```
 zurück. Mit timbeaus Vorschlag dagegen kannst du gezielt Integeres oder was auch immer erhalten, oder eine Zufallsreihe widerholen. Ein solches Random-Objekt brauchst du nur ein einziges Mal (darauf rufst du dann 
	
	
	
	





```
.nextInt()
```
 zum Erzeugen der nächsten Zahl auf), 
	
	
	
	





```
Math.random()
```
 dagegen brauchst du immer, wenn du eine neue Zufallszahl brauchst.


----------



## babuschka (28. Mrz 2012)

wie kann man sich aus dem forum löschen?


----------



## SlaterB (28. Mrz 2012)

schreibe an L-ectron-X,
java-forum.org
deine Postings bleiben aber erhalten, sind nun Zeitgeschichte


----------



## Marcinek (28. Mrz 2012)

Indem man die Forenbetreiber kontaktiert.

java-forum.org - Kontakt


----------



## babuschka (28. Mrz 2012)

slaterB Hansa wird meister und bayern steigt ab XD


----------



## HimBromBeere (28. Mrz 2012)

> slaterB Hansa wird meister und bayern steigt ab XD


[OT]In dieser Saison leider nicht und wie´s aussieht auch nicht in der nächsten...;([/OT]


----------



## hüteüberhüte (28. Mrz 2012)

Nicht-OT: Math.random() gibt ein double aus dem Bereich [0,1) zurück


----------

