Mindmaster- Hilfe.

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Zuerst brauchst du ein Set um dir die bereits verwendeten Zahlen zu merken:

    Quellcode

    1. private Set<Integer> usedIntegers = new HashSet<Integer>()


    Dann must du dort mit Hilfe der add()-Methode des Sets die Zahlen rein tun, die du nicht verwenden willst.

    Nun noch die gibZufallszahl()-Methode anpassen.

    Quellcode

    1. public int gibZufallszahl()
    2. {
    3. Integer number = Zahl.nextInt(10-usedIntegers.size());
    4. for (Integer i = 0; i > number; i++)
    5. {
    6. if (usedIntegers.contains(i))
    7. {
    8. number++;
    9. }
    10. }
    11. return number;
    12. }
    Alles anzeigen

    (Man beachte, dass diese Methode nicht nur durch Zufall terminiert...)

    Generell solltest du dir mal die Java Collection-Klassen (Set, Map und List) und deren Implementierungen (HashSet, HashMap, TreeMap, ArrayList, LinkedList, usw...) anschauen.
    Das ist Java-Basiswissen und würde dein Programm erheblich vereinfachen und übersichtlicher machen.
  • Ich habe das mal so eingefügt, trotzdem tauchen noch gleiche Zahlen auf.
    Ist bestimmt einfach nur dumm eingesetzt.
    Und ach ja

    Quellcode

    1. private Set<Integer> usedIntegers = new HashSet<Integer>()

    Das habe ich oben bei den Definitionen eingefügt. ist es richtig?

    Quellcode

    1. public void Ausgabe()
    2. {
    3. Eingabe5 = new Eingabefeld(""+Zahl.nextInt(10),50,50);
    4. Eingabe5.setzePosition(120,20);
    5. Eingabe5.setzeHintergrundfarbe("blau");
    6. Eingabe6 = new Eingabefeld(""+Zahl.nextInt(10),50,50);
    7. Eingabe6.setzePosition(170,20);
    8. Eingabe6.setzeHintergrundfarbe("blau");
    9. Eingabe7 = new Eingabefeld(""+Zahl.nextInt(10),50,50);
    10. Eingabe7.setzePosition(220,20);
    11. Eingabe7.setzeHintergrundfarbe("blau");
    12. Eingabe8 = new Eingabefeld(""+Zahl.nextInt(10),50,50);
    13. Eingabe8.setzePosition(270,20);
    14. Eingabe8.setzeHintergrundfarbe("blau");
    15. Integer number = Zahl.nextInt(10-usedIntegers.size());
    16. for (Integer i = 0; i > number; i++)
    17. {
    18. if (usedIntegers.contains(i))
    19. {
    20. number++;
    21. }
    22. }
    23. }
    Alles anzeigen

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von Wasilij50 ()

  • Glaub mir ich habe es oft genug gelesen um zu kapieren , dass ich keine Ahnung von java habe.
    Hafner was ist diese " add()" methode?

    Edit: Habe inzwischen alles fertig, habe Tasten eingefügt und noch ein paar andere unnötige Effekte =P
    Das einzige Problem ist , dass sich die Zahlen im Code wiederholen. =(

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Wasilij50 ()

  • Wieso , das sollte doch alles per Zufall erzeugt werden.
    Und wenn sich irgendwelche Zahlen im Code wiederholen, dann einfach diese Zahlen durch andere Zufallszahlen ersetzen. Und wenn sie wieder gleich sind, sollten sie einfach andauernd durch andere ersetzt werden, bis der Code keine gleichen Zahlen beinhaltet.
    Tut mir leid wenn sich das alles so dumm anhört, ich verstehe noch nicht viel von Java. Ich beschäftige mich das erste mal damit.
    Oder habe ich dich einfach nur falsch verstanden?
    Und wo kommt jetzt diese Methode hin?
    und was ist mit der anderen?

    Quellcode

    1. usedIntegers.add(4);
  • Ich hatte einen Fehler in der Schleife. Es muss " i <= number" heisen.
    Das kommt davon wenn man so spät Java aus dem Kopf programmiert.

    Das Set usedIntegers enthält alle Zahlen, die nicht mehr ausgewählt werden sollen.
    Nun benötige ich eine Zufallszahl zwischen 0 und 9.
    Das liefert mir die Methode
    Zahl.nextInt(10);
    Da aber schon einige Zahlen raus sind, benötige ich diese nicht als Zufallszahl.
    usedIntegers.size() sagt mir wie viele Zahlen schon raus sind. Also die Anzahl der Zahlen in meinem Set.
    Zahl.nextInt(10-usedIntegers.size());
    gibt mir also dir restlichen zufälligen Zahlen, die ich benötige.
    Bisher habe ich aber noch nicht berücksichtigt, welche Zufallszahlen in dem Set sind.
    Deswegen zähle ich eine Zahl i bis zu meiner zufälligen Zahl hoch und prüfe immer ob sie schon in der Liste ist. Wenn ja, muss ich number hoch setzen.

    Quellcode

    1. public int gibZufallszahl()
    2. {
    3. Integer number = Zahl.nextInt(10-usedIntegers.size());
    4. for (Integer i = 0; i <= number; i++)
    5. {
    6. if (usedIntegers.contains(i))
    7. {
    8. number++;
    9. }
    10. }
    11. return number;
    12. }
    Alles anzeigen

    Beispiel:
    Die Zahlen 0, 1, 2, 3, 5, 6, 8 sind schon im Set.
    Dann kann
    Zahl.nextInt(10-usedIntegers.size());
    mir eine Zahl von 0 - 2 liefern.
    nehmen wir an es ist die 1.
    Nun kommt man in die for-Schleife.
    1 = 0 --> 0 ist schon drinnen --> number = 2
    1 = 1 --> 1 ist schon drinnen --> number = 3
    1 = 2 --> 2 ist schon drinnen --> number = 4
    1 = 3 --> 3 ist schon drinnen --> number = 5
    1 = 4 --> 4 ist nicht drinnen --> number = 5
    1 = 5 --> 5 ist schon drinnen --> number = 6
    1 = 6 --> 6 ist schon drinnen --> number = 7
    1 = 7 --> 7 ist nicht drinnen --> number = 7
    Die Schleife bricht ab.
    Das Ergebnis ist 7.

    Man kann auch sowas machen:

    Quellcode

    1. public int gibZufallszahl()
    2. {
    3. Integer number = null;
    4. do
    5. {
    6. number = Zahl.nextInt(10);
    7. }
    8. while (usedIntegers.contains(number))
    9. return number;
    10. }
    Alles anzeigen

    Das ist einfacher zu verstehen aber wenn du hinreichend viel Pech hast wird diese Schleife nie beendet. Man solte Termination nie vom Zufall abhänig machen.
  • Ich habe keine Ahnuung wo du die Methode gibZufallszahl() überhaupt verwendest. Deswegen kann ich dir nicht sagen wo die Stelle ist wo du eine solche Zufallszahl verbrauchst und nicht mehr verwenden willst. Deswegen kann ich dir nicht sagen wo du die add()-Methode hinschreiben musst.

    Leute ich bin "fast" fertig.

    Da bin ich skeptisch. Bisher hat dein Programm nur zusammenhanglose Methoden.
  • Ich habe das jetzt mal so gemacht.
    Es sollen jeweils 4 Felder erstellt werden, welche diese 4 Zufallszahlen beinhalten.
    Das ist natürlich nur ein kleiner Abschnitt des Programms.


    Quellcode

    1. public int gibZufallszahl()
    2. {
    3. usedIntegers.add(4);
    4. {
    5. Integer number = Zahl.nextInt(10-usedIntegers.size());
    6. for (Integer i = 0; i <= number; i++)
    7. {
    8. if (usedIntegers.contains(i))
    9. {
    10. number++;
    11. }
    12. }
    13. return number;
    14. }
    15. }
    16. public void Ausgabe()
    17. {
    18. Ausgabe5 = new Eingabefeld(""+gibZufallszahl(),50,50);
    19. Ausgabe5.setzePosition(120,20);
    20. Ausgabe5.setzeHintergrundfarbe("weiss");
    21. Ausgabe6 = new Eingabefeld(""+gibZufallszahl(),50,50);
    22. Ausgabe6.setzePosition(170,20);
    23. Ausgabe6.setzeHintergrundfarbe("weiss");
    24. Eingabe7 = new Eingabefeld(""+gibZufallszahl(),50,50);
    25. Eingabe7.setzePosition(220,20);
    26. Eingabe7.setzeHintergrundfarbe("weiss");
    27. Ausgabe8 = new Eingabefeld(""+gibZufallszahl(),50,50);
    28. Ausgabe8.setzePosition(270,20);
    29. Ausgabe8.setzeHintergrundfarbe("weiss");
    30. }
    Alles anzeigen


    Geht trotzdem nicht :(

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Wasilij50 ()

  • Versuche das mal:

    Quellcode

    1. public int gibZufallszahl()
    2. {
    3. Integer number = Zahl.nextInt(10-usedIntegers.size());
    4. for (Integer i = 0; i <= number; i++)
    5. {
    6. if (usedIntegers.contains(i))
    7. {
    8. number++;
    9. }
    10. }
    11. return number;
    12. }
    13. public void Ausgabe()
    14. {
    15. Integer number1 = gibZufallszahl();
    16. usedIntegers.add(number1);
    17. Integer number2 = gibZufallszahl();
    18. usedIntegers.add(number2);
    19. Integer number3 = gibZufallszahl();
    20. usedIntegers.add(number3);
    21. Integer number4 = gibZufallszahl();
    22. usedIntegers.add(number4);
    23. Ausgabe5 = new Eingabefeld(number1.toString(),50,50);
    24. Ausgabe5.setzePosition(120,20);
    25. Ausgabe5.setzeHintergrundfarbe("weiss");
    26. Ausgabe6 = new Eingabefeld(number2.toString(),50,50);
    27. Ausgabe6.setzePosition(170,20);
    28. Ausgabe6.setzeHintergrundfarbe("weiss");
    29. Eingabe7 = new Eingabefeld(number3.toString(),50,50);
    30. Eingabe7.setzePosition(220,20);
    31. Eingabe7.setzeHintergrundfarbe("weiss");
    32. Ausgabe8 = new Eingabefeld(number4.toString(),50,50);
    33. Ausgabe8.setzePosition(270,20);
    34. Ausgabe8.setzeHintergrundfarbe("weiss");
    35. }
    Alles anzeigen
  • Tja, die Fehlermeldung ist ziemlich eindeutig. Es gibt in der Zeile nur eine Stelle wo so etwas auftreten kann. Die wirklich interessante Frage ist doch: Warum kann es überhaupt auftreten? Die Antwort darauf findest du nicht in dieser Methode. Aber wenn du magst, kannst du sie mit einer aussagekräftigeren Fehlermeldung ausstatten:

    Quellcode

    1. public int gibZufallszahl()
    2. {
    3. if (usedIntegers.size() == 10)
    4. {
    5. throw new RuntimeException("No free random numbers left.");
    6. }
    7. Integer number = Zahl.nextInt(10-usedIntegers.size());
    8. for (Integer i = 0; i <= number; i++)
    9. {
    10. if (usedIntegers.contains(i))
    11. {
    12. number++;
    13. }
    14. }
    15. return number;
    16. }
    Alles anzeigen