# Aus einer Schleife springen



## Destiny1985 (20. Jun 2005)

Gegeben ist eine Schleife, die bei einer Bankverwaltung die nächste freie, konforme Kontonummer ermitteln soll (es geht um die letzten 3 Stellen). Der folgende Code prüft, ob die moeglichen Nummer schon vergeben sind.


```
private int getNewKontoNummer()
  {
    for (int i = 100; i <= 999; i++)
    {
      for (int j = 0; j <= 99; j++)
      {
        if (i > vergebeneKontoNummern[j])
          this.kontoNummer = i;
      }
    }
    return kontoNummer;
  }
```

Das Problem ist: die Schleife läuft als weiter. Wenn 107 die letzte belegte Nummer ist, will ich das er mir sagt 108 ist die nächste freie (also 108 in die variable kontoNummer schreiben) UND DANN die Schleife verlässt. Momentan arbeitet er ja so, der er bis 999 die Schleife durchrattert. Wie springe ich vorzeitig aus einer Schleife ?


----------



## Beni (20. Jun 2005)

```
loop: for( ... ){
   for( ... ){
      if( .. ){
         break;  // springt aus der inneren Schleife
      }
      else if( ... ){
         break loop; // springt aus der gesammten Schleife
      }
   }
}
```


----------



## KISS (20. Jun 2005)

```
private int getNewKontoNummer()
  {
    outer: for (int i = 100; i <= 999; i++)
    {
      for (int j = 0; j <= 99; j++)
      {
        if (i > vergebeneKontoNummern[j])
{
          this.kontoNummer = i;
break outer;
}
      }
    }
    return kontoNummer;
  }
```

allerdings ist der algorithmus unsinn, gehe doch durch vergebene kontonummern und hole dir di kleinste zahl >0 die noch nicht darin steht.


----------



## Destiny1985 (20. Jun 2005)

KISS hat gesagt.:
			
		

> allerdings ist der algorithmus unsinn, gehe doch durch vergebene kontonummern und hole dir di kleinste zahl >0 die noch nicht darin steht.



würde auch gehen, aber macht doch letztendlich auch keinen unterschied...es läuft schonmal


----------



## KISS (20. Jun 2005)

es ist schon ein unterschied ob ich einen algorithmus mit logarithmischem oder expotentiellem laufzeitverhalten habe,
zumal sich die 2. variante mit sorted sets und binary search noch erheblich beschleunigen laesst


----------



## Destiny1985 (20. Jun 2005)

KISS hat gesagt.:
			
		

> ...mit sorted sets und binary search...



Ich versteh kein Wort


----------



## bygones (20. Jun 2005)

Destiny1985 hat gesagt.:
			
		

> KISS hat gesagt.:
> 
> 
> 
> ...


mhm - am einfachste wäre es doch eine variable zu halten die einfach mitläuft pro eröffneten Konto.... ein blick auf diese variable sagt dir dann welche Nummer dran ist...


----------



## Destiny1985 (20. Jun 2005)

deathbyaclown hat gesagt.:
			
		

> mhm - am einfachste wäre es doch eine variable zu halten die einfach mitläuft pro eröffneten Konto.... ein blick auf diese variable sagt dir dann welche Nummer dran ist...



Da ist was wahres dran *gg*


----------



## KISS (20. Jun 2005)

das problem dabei, irgend wann ist dein zahlenraum aufgebraucht und du hast luecken von geschlossenen konten


----------



## Destiny1985 (20. Jun 2005)

Ich peil es gerade nicht  Hab die Funktion jetzt IHMO schön einfach gehalten, aber es fumktioniert nicht, er erhöht mir das nicht.


```
private String getNewKontoNummer()
  {
    this.kontoNummer = 100 + kontoZaehler;    
  
    this.ktoNR = ktoNR + String.valueOf(kontoNummer);
    kontoZaehler++;
    
    return ktoNR;
  }
```

Zur Erklärung: Ich habe den String ktoNr deklariert mir "1041000" und die 100 - 999, die diese Methode ermittelt, sollen dahinter gehängt werden, so das die Nummer dann folgendermaßen aufgebaut sind:

1041000100
1041000101
...


----------



## KISS (20. Jun 2005)

falsches post, sorry 
edit: ich habe zum falschen thread gepostet und loeschen geht nicht


----------



## Destiny1985 (20. Jun 2005)

woat ? du liegst glaub ich gerade bissel daneben 

das zusammensetzen des strings geht schon, es kommt zZ halt bei jedem neuen konto die ktoNR

1041000100 

raus...

sprich: die letzten 3 Ziffern werden nicht um eins erhöht.

[edit] war auf den post davor bezogen, den kiss mittlerweile geändert hat  [/edit]


----------



## bygones (20. Jun 2005)

ich würde das ganze in einer static variable halten


```
public class Konto {
  private String name;
  // mehr instanzfelder
  private int kontonummer;

  private static int kontozähler = 1;

  public Konto(String name) {
   this.name = name;
   
   kontonummer = kontozähler;
   kontozähler++;
 }
```
als bsp....

dein Problem ist dass die Zählvariable wahr. nicht statisch ist, d.h. jede instanz hat seinen eigenen Zähler, ergo kann nichts raufgezählt werden, weil keine INstanz den Zähler der anderen kennt. Durch die static variable ist es gegeben, dass sie für alle instanzen gleich und bekannt ist, womit ein Raufzählen möglich ist


----------



## Destiny1985 (20. Jun 2005)

ah logo, das ists ! der zähler ist ja objektabhängig....

jetzt tut es..danke !


----------

