Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hi Leute,
ich hab' eine Frage bezüglich Objekten bzw. deren Attributen.
Vorher wurden 150 verschiende Artikel mit Zufallswerten erstellt u. a. auch eine Artikelnummer, die den Artikel eindeutig indentifiezieren soll.
Die folgende Methode sollte eigentlich genau dann eine neue Nummer erstellen, wenn ein anderer Artikel bereits dieselbe hat, aber irgendwas funktioniert da nicht und ich komme nicht auf den Fehler. Es werden manchmal die selben Zahlen ausgegeben !
Code:
private void ArtikelNrIstEinzigartig(){
for (int i = 0; i < artikel.length; i++) {
for (int j = 0; j < artikel.length; j++) {
if( i != j){
if(artikel[i].getArtikelnummer() == artikel[j].getArtikelnummer()){
artikel[i].setArtikelnummer(MRandom.nextInt(10000, 99999)); // liefert eine neue Zufallszahl zwischen 10000 und 99999
}
}
}
}
}
Wenn ihr Alternativlösungen zu der der obigen habt, bitte enthaltet mir diese nicht vor.
wenn du eine Übereinstimmung findest, setzt du eine neue Zufallszahl, aber die kann doch auch wieder mit irgendeiner übereinstimmen??
falls du bei diesem Zufallsprinzip bleibst, muss du dir merken, ob in einem Gesamtdurchlauf etwas geändert wurde
und den Gesamtlauf solange wiederholen bis nichts mehr zu ändern ist,
alternativ direkt bei einer Änderung gleich wieder mit dem gesamten Array vergleichen und direkt eine neue Zufallszahl wählen, falls die bisher neue schon vorhanden ist
Wenn der Bereich nich allzugroß ist, geht auch das:
- Liste mit allen Zahlen im gewünschten Bereich erstellen
- Collections.shuffle (oder so ähnlich)
- Immer wenn du eine Nummer brauchst, gehst du den Pu... sorry, ich meine, dann gehst du in die Liste und holst das erste Element mit remove(0)
Danke euch.
@SlaterB das scheint mir eine ganz gute Idee zu sein. Ich werd mal schauen, ob ich das umsetzten kann.
@Marco Selbstverständlich spricht theoretisch natürlich nichts dagegen und wäre ja auch viel sinnvoller, aber ich finde das Problem ansich ganz interessant und suche deshalb nach einer Lösung.
EDIT
Hab mir selber nochmal gedanken gemacht und bin nun bei dieser Lösung die soweit cih es ehe auch sehr gut funktioniert:
Code:
private void ArtikelNrIstEinzigartig(){
for (int i = 0; i < artikel.length; i++) {
for (int j = 0; j < artikel.length; j++) {
if( i != j){
if(artikel[i].getArtikelnummer() == artikel[j].getArtikelnummer()){
artikel[i].setArtikelnummer(MRandom.nextInt(10000, 99999)); // liefert eine neue Zufallszahl zwischen 10000 und 99999
i = 0;
}
}
}
}
}
Danke nochma' an Slater für den Anstoß zu dieser Idee !
du prüfst so lange ob die nummer darin enthalten ist
ist sie darin enthalten, neue nummer, weiter prüfen
ist nicht drin, fügst du sie ein, nächster artikel..
so ungefähr, ungetestet...
Code:
public class Test{
public static void main(String[] args) {
ArrayList<Artikel> artikel = new ArrayList<Artikel>();
HashSet<String> nummern = new HashSet<String>();
for(Artikel a: artikel){
while(nummern.contains(artikel.getArtikelnummer())){
a.setArtikelnummer(MRandom.nextInt(10000, 99999));
}
nummern.add(a.getArtikelnummer(());
}
}
}
könnte theoretich eine endlos schleife werdne, wenn alle nummern vergeben sind, aber das ist dein problem ;-)