Hallo zusammen. Ich hab ein Problem mit ner Methode, aber ich weiß nicht, warum sie nicht funktioniert.
Es geht darum, dass man beim Erzeugen eines Konto-Objekts sich eine EC-Nummer holt, die zufällig generiert wird. Diese Nummer darf allerdings keine zweimal vergeben werden.
Ich habe zwei Vektoren. Der eine heißt "vector"...da stehen die ganzen konstruierten Konto-Objekte drin. Der andere heißt "ecNummern", wo die ganzen Ec-Nummern drinstehen sollen.
Also, das Anlegen der Objekte funzt so:
Die Methode getEcNummer steht hier. Sie soll dafür sorgen, dass keine Zahl im EC-Nummern-Vektor zweimal auftaucht...bzw, die generierte Zahl soll erst hinzugefügt werden, wenn sichergestellt ist, dass der Vektor die Zahl nicht schon bereits hat. Ich hab auch schon mal 10 Konten in den Code zum Erzeugen geschrieben und die random-Number auf 10 gesetzt...aber auch da kommt keine unendlich-Schleife zustande...
Hier nochmal ohne die prints:
Die Methode an sich scheint wie gesagt nicht zu funzen...im Vektor stehen nachher trotzdem doppelte Zahlen..hab ich hier im Methoden-Code irgendwas falsch...?
Es geht darum, dass man beim Erzeugen eines Konto-Objekts sich eine EC-Nummer holt, die zufällig generiert wird. Diese Nummer darf allerdings keine zweimal vergeben werden.
Ich habe zwei Vektoren. Der eine heißt "vector"...da stehen die ganzen konstruierten Konto-Objekte drin. Der andere heißt "ecNummern", wo die ganzen Ec-Nummern drinstehen sollen.
Vector vector = new Vector();
Vector ecNummern = new Vector();
Also, das Anlegen der Objekte funzt so:
vector.add (new DGirokonto ("Peter Maffay",20,getLaufnummer(),getEcNummer()));
Die Methode getEcNummer steht hier. Sie soll dafür sorgen, dass keine Zahl im EC-Nummern-Vektor zweimal auftaucht...bzw, die generierte Zahl soll erst hinzugefügt werden, wenn sichergestellt ist, dass der Vektor die Zahl nicht schon bereits hat. Ich hab auch schon mal 10 Konten in den Code zum Erzeugen geschrieben und die random-Number auf 10 gesetzt...aber auch da kommt keine unendlich-Schleife zustande...
Code:
int getEcNummer()
{
System.out.println ("Methode aufgerufen");
int zahl = (int)Math.ceil(Math.random()*10);
System.out.println ("Zahl gesetzt "+ zahl);
boolean besetzt = false;
boolean frei = false;
System.out.println ("Boolean besetzt gesetzt.");
if (ecNummern.size()>0)
{
System.out.println ("If-Schleife wird ausgeführt");
while (frei == false)
{
besetzt = false;
System.out.println ("While-Schleife gestartet");
int zufall = (int)Math.ceil(Math.random()*10);
System.out.println ("Zufallszahl gesetzt auf " + zufall);
System.out.println ("For-Schleife läuft durch");
for (int s = 0; s > (ecNummern.size()); s++)
{
Object o = ecNummern.get(s);
String p = (String) o; //o ließ sich nicht direkt in einen integer umwandeln
int t = Integer.valueOf(p);
if (zufall == t)
{
besetzt = true;
System.out.println ("Nummer gibts schon! While-Schleife nochmal...");
}
}
if (besetzt == false)
{
System.out.println ("Nummer existiert nicht. While-Schleife endet...");
zahl = zufall;
frei = true;
}
}
}
System.out.println ("Zahl wird zu Vektor hinzugefügt");
ecNummern.add(zahl);
System.out.println ("Zahl wird returned");
System.out.println ("");
System.out.println("=====EC-VEKTOR=====");
for (int z = 0; z < ecNummern.size(); z++)
{
System.out.println (ecNummern.get(z));
}
System.out.println("=====EC-VEKTOR=====");
return zahl;
}
Hier nochmal ohne die prints:
Code:
int getEcNummer()
{
int zahl = (int)Math.ceil(Math.random()*10);
boolean besetzt = false;
boolean frei = false;
if (ecNummern.size()>0)
{
while (frei == false)
{
besetzt = false;
int zufall = (int)Math.ceil(Math.random()*10);
for (int s = 0; s > (ecNummern.size()); s++)
{
Object o = ecNummern.get(s);
String p = (String) o; //o ließ sich nicht direkt in einen integer umwandeln
int t = Integer.valueOf(p);
if (zufall == t)
{
besetzt = true;
}
}
if (besetzt == false)
{
zahl = zufall;
frei = true;
}
}
}
ecNummern.add(zahl);
// for (int z = 0; z < ecNummern.size(); z++)
// {
// System.out.println (ecNummern.get(z));
// }
return zahl;
}
Die Methode an sich scheint wie gesagt nicht zu funzen...im Vektor stehen nachher trotzdem doppelte Zahlen..hab ich hier im Methoden-Code irgendwas falsch...?