Es gibt eine Reihe von Dingen aus Ihrer Frage fehlt. Zum einen, da Sie uns die Gum
Klasse nicht gegeben haben, kann ich nicht herausfinden, wie jedes new Gum()
eine einzigartige Gum
erstellen wird. Hat Gum
eine Art von flavor
Instanzvariable, die zu einem zufälligen Geschmack initialisiert wird? Vielleicht, aber Sie haben uns diese Information nicht gegeben. Auch, wie die andere Antwort darauf hinweist, wird die Verwendung von ==
, um Zahnfleisch zu vergleichen, nicht funktionieren. Unter der Annahme, dass jede Gum
eine flavor
hat, müssen Sie eine equals()
Methode zur Verfügung stellen, die die Felder flavor
für Gleichheit vergleicht (und eine hashCode
Funktion, die den gleichen Hash-Wert für alle Gum
Objekte mit dem gleichen Geschmack zurückgibt).
Das Problem, das ich am meisten hervorheben wollte, war der Fehler in Ihrer Schleifenlogik. Sie gehen durch das Array der vorhandenen Gum
Objekte, und wenn Sie ein Duplikat finden, erstellen Sie ein neues Gum
. Das wird die Arbeit nicht erledigen. Angenommen, Ihr Array besteht aus den Geschmacksrichtungen A, B, C, D, E. Angenommen, Ihr new Gum()
erzeugt ein Kaugummi mit Geschmack C. Sie gehen durch das Array und finden, dass es mit übereinstimmt. So generieren Sie eine weitere Gum
--Say Ihre zufällige Gum
Generator erzeugt eine Gum
mit Geschmack B. Jetzt Ihre Schleife wird es nicht finden, da Sie immer noch durch das Array gehen, und Sie werden nur auf D und E zu sehen. Sie erhalten also ein Duplikat in Ihrem Paket.
Also was machst du? Eine Möglichkeit besteht darin, dass Sie jedes Mal, wenn Sie ein Duplikat finden, ein neues Gum
generieren und dann am Anfang des Arrays von vorne beginnen. Das ist ein ziemlich langsamer Weg, Dinge zu tun, aber es wird funktionieren. Einige bessere Optionen:
Pflegen Sie eine Set
aller Gum
‚s, die bereits in der Packung sind. Jetzt, anstatt durch das Array zu gehen, um zu sehen, ob ein Gum
ein Duplikat ist, sehen Sie einfach, ob der Satz es enthält. Wenn Sie HashSet
verwenden, können Sie diesen Test in konstanter Zeit durchführen, anstatt ein Array zu durchsuchen. (Wenn Sie eine HashSet
verwenden, werden Sie auf jeden Fall benötigen eine funktionierende hashCode
Funktion.)
Halten Sie ein Array von allen Gum
Aromen, die nicht verwendet wurden.Wenn Sie mit 12 Aromen beginnen, wird die erste new Gum()
eine Zufallszahl von 0 bis 11, die zweite eine Zufallszahl von 0 bis 10, die dritte von 0 bis 9 usw. verwenden. Jedes Mal verwenden Sie das Array und die Zufallszahl, um den richtigen Geschmack auszuwählen, und führen dann einen Austausch durch, um diesen Geschmack an das Ende des Arrays zu verschieben. Zum Beispiel, wenn das Array beginnt A, B, C, D, E, F, G, H, I, J, K, L und Ihre Zufallszahl ist 4, das ist Geschmack E, und Sie tauschen das mit L zu machen Ihre Anordnung A, B, C, D, L, F, G, H, I, J, K, E. Die nächste Zufallszahl geht nur von 0 bis 11, also wird sie nicht E auswählen. Was immer sie wählt, tauscht man mit K. und so weiter.
Ich bin mir nicht sicher, ob ich Ihre Frage richtig verstehe. Aber wenn Sie nur eine nicht doppelte Sammlung von Waffen speichern möchten, können Sie java.util.Set zum Speichern verwenden. Sie müssen die Equals-Methode in der Gum-Klasse implementieren, um die Gleichheitsbedingung zu definieren. –
Eine Frage: Wie vergleichen Sie Gum-Objekte? Verwenden Sie seine Speicheradresse oder seinen Wert? – MaxZoom
Was ist die Definition von "Art" von Kaugummi? Sie vergleichen jetzt, ob zwei Gum-Referenzen auf dieselbe Gum-Objektinstanz verweisen. Da Sie für jedes Element im Array eine neue Gum-Instanz erstellen, wird es immer anders aussehen. –