# Durchlauf einer for-Schleife unterbrechen - wie ?



## Teschi (14. Dez 2006)

Hi , jetzt mal eine ernst gemeinte Frage:

Ich habe einen ObjektArray angelegt und dieser wird mittels einer for-Schleife durchlaufen und bei jedem Durchlauf wird so einiges an Array-Inhalten auf der Console ausgegeben. 

Nun gibt es aber auch leere ObjektArrays (Nummer 6 bis 10). Wie kann ich die Schleife dazu bringen, sobald ein Array leer ist, zu unterbrechen ?

(Das ich die Zählvariable einfach von 1 bis 6 laufen lassen könnte weiß ich, aber ich möchte die Schleife stoppen, sobald der Array leer ist.) 

Vielen Dank schonmal allen fleißigen Helfern!!   :toll: 



```
public class ObjektArray {

	
	public static void main(String[] args) {
		
		// Anlegen des Objekt-Arrays; 
		
		
		Person[] Person  = new Person[10];
		
		Person[0]= new Person(178, 70, true);
		Person[1]= new Person(162, 55, false);
		Person[2]= new Person(176, 80, false);
		Person[3]= new Person(185, 90, true);
		Person[4]= new Person(190, 110, true);
		Person[5]= new Person(158, 66, false);
		Person[6]= new Person();
		Person[7]= new Person();
		Person[8]= new Person();
		Person[9]= new Person();
		
		
		for (int i=0; i<Person.length; i++) {
			
			System.out.println("Person " + (i+1) +":\n");
		      System.out.print("Normalgewicht: ");
		      Person[i].gibNormalGewichtAus();
		      System.out.print("Idealgewicht: ");
		      Person[i].gibIdealGewichtAus();
		      System.out.print("BMI: ");
		      Person[i].gibBMIAus();
		      System.out.print("\n");
		    
		}
		 
		
		
		

	}

}
```
[/code]


----------



## DaKo (14. Dez 2006)

Schlüsselwörter continue und break

Je nachdem was du brauchst


----------



## L-ectron-X (14. Dez 2006)

Teschi hat gesagt.:
			
		

> Hi , jetzt mal eine ernst gemeinte Frage:


Na das hoffe ich doch wohl...  

mit _break;_ kannst du die Verarbeitung der Schleife abbrechen, _return_ würde die Methode verlassen ggf auch einen Wert zurückgeben.


----------



## Teschi (14. Dez 2006)

das sind übungsaufgaben. hab mir das grad nochmal angesehen. also die schleife soll nicht unterbrochen werden, sie soll lediglich wenn ein Array Nullwerte beinhaltet nichts ausgeben, wohl aber weiterlaufen. 

wie kann ich das realisieren ? ich muss doch irgendwo eine IF-Anweisung einbauen in der sowas steht wie 

if Person_=NULL, -> continue am anfang der schleife


oder so ?


danke schonmal_


----------



## DaKo (14. Dez 2006)

Entweder mit continue
oder

```
if Object != null
   Ausgabe
```


----------



## Teschi (14. Dez 2006)

Danke für deine Hilfe, habe das jetzt so geschrieben:


```
public class ObjektArray {

	
	public static void main(String[] args) {
		
		// Anlegen des Objekt-Arrays; 
		
		
		Person[] Person  = new Person[10];
		
		Person[0]= new Person(178, 70, true);
		Person[1]= new Person(162, 55, false);
		Person[2]= new Person(176, 80, false);
		Person[3]= new Person(185, 90, true);
		Person[4]= new Person(190, 110, true);
		Person[5]= new Person(158, 66, false);
		Person[6]= new Person();
		Person[7]= new Person();
		Person[8]= new Person();
		Person[9]= new Person();
		
		
		for (int i=0; i<Person.length; i++) {
			  
			  if (Person[i] != null) {
			  System.out.println("Person " + (i+1) +":\n");
		      System.out.print("Normalgewicht: ");
		      Person[i].gibNormalGewichtAus();
		      System.out.print("Idealgewicht: ");
		      Person[i].gibIdealGewichtAus();
		      System.out.print("BMI: ");
		      Person[i].gibBMIAus();
		      System.out.print("\n");
			  }
		}
		 
		
		
		

	}

}
```

aber komischerweise durchläuft er immernoch alle 10 Arrayelemente und gibt auch alle aus  Er soll ja von Person[6] bis Person[9] nichts ausgeben [/code]


----------



## DaKo (14. Dez 2006)

Weil es die Elemente 6 -10 gibt! *Vermutlich* sind deren Felder nur nicht gesetzt. 

Mein Vorschlag:
In der Klasse Person eine Funktion 'isEmpty' oder Ähnliches implementieren un d damit arbeiten


----------



## Teschi (14. Dez 2006)

ja, also Werte wurden an die nummer 6 bis 9 nicht übergeben (sieht man ja oben).

gibts wirklich keinen einfachen befehl wie  IF Person_ != isempty... oder sowas ?_


----------



## SnooP (14. Dez 2006)

das ginge über != null... wenn aber von vornherein mit new Person in jedem Feld des Arrays ein Personen-Objekt angelegt wurde, dann ist es ja gerade nicht leer  ...

Also entweder - man erstellt gar nicht erst Personenobjekte in jedem Feld, wenn man die Attribute der Person nicht auch mit Werten füllen will, oder man setzt wie dako vorgeschlagen hat eine Variable in der Klasse Person auf true, wenn sie anfangs noch leer ist...
sprich: private empty = true;

Bei der ersten Methode, die aus einer leeren Person eine volle macht: empty = false; setzen...

eine Abfrage-Methode isEmpty() liefert den Variablenwert für empty... und dann kannst du abragen mit:

```
if (!Person[i].isEmpty) {
   //Ausgaben;
}
```

übrigens gewöhn dir an, dass man Variablen immer klein nennt, Klassen hingegen groß...
sprich: mache Person[] person  = new Person[10]; 

aber besser wäre es, wie gesagt, statt person 6-9 gar nicht über new Person() zu erzeugen.


----------



## The_S (14. Dez 2006)

Das wäre die Lösung von DaKo. Alternative wäre alle Werte zu überprürfen, ob sie null sind. Oder du überschreibst in der Person-Klasse die Methoden equals und hashCode und vergleichst dann mit


```
if (!person[i].equals(new Person()) {
}
```

BTW: Variablennamen werden klein geschrieben.


----------



## Teschi (14. Dez 2006)

danke euch. bin extremster anfänger und frage mich wie ich diese methode bzw. eigenschaft da reinprogrammieren kann ?




> Bei der ersten Methode, die aus einer leeren Person eine volle macht: empty = false; setzen...
> 
> eine Abfrage-Methode isEmpty() liefert den Variablenwert für empty... und dann kannst du abragen mit:




Thx


----------



## Leroy42 (14. Dez 2006)

```
class Person {
  private boolean isEmpty = true;
  // ...
  public Person() {}
  public Person(int größe, int alter, boolean istMännlich) {
    isEmpty = false;
    ...
  }

  public boolean isEmpty() {return isEmpty;}
}
```


----------

