Würfel in Java programmieren?


07.12.2022, 12:15

Ich denke es hat etwas mit dem do while zutun

4 Antworten

Alles, was in der do-while-Schleife passiert, ist, dass ein logischer Ausdruck berechnet wird (und das Ergebnis verworfen wird).

Damit bei der Bedingung irgendwann etwas Anderes herauskommt, muss in der Schleife irgendwo eine Zuweisung (variable = Ausdruck) stehen. (Für Fortgeschrittene: Ggf. in einer Methode mit "Nebenwirkung" und notfalls in einer Methode mit "Nebenwirkung", die in der Bedingung aufgerufen wird.)

Vermutlich soll auch das, was oberhalb der Schleife steht, mit in die Schleife hinein.

-----

Übrigens, poste Quelltext bitte auch als Quelltext und nicht (nur) als Screenshot. (Dafür gibt es in der Formatierungsleiste über den Eingabefeldern hier das Symbol </>)

-----

Noch etwas aus meinen persönlichen Meinungen: Ich halte es für schlechten Stil, sich darauf zu verlassen, dass ein Cast wie

(int) zufall

die Nachkommastellen abschneidet anstatt zu runden - das ist eine Spracheigentümlichkeit von Java. (Man weiß ja nie, mit welchen anderen Sprachen man es zu tun haben wird und welche allzu spezifischen Gewohnheiten dann kontraproduktiv sind - oder auch, ob der Code nicht später mal in eine andere Sprache transferiert wird und der Umsetzer solche Kleinigkeiten vergisst.) - In C# z. B. wird bei diesem Cast gerundet. Besser man verwendet explizit Math.floor() oder Math.round():

(int) Math.floor(zufall)
// bzw.
(int) Math.round(zufall)

Diese Hochsprachen sind ohnehin so langsam, dass es auf die paar Mikrosekunden nicht ankommt, oder der Compiler sollte so intelligent sein, diese Funktion wegzurationalisieren, wenn sie ohnehin aufgerufen wird.

(das erinnert mich daran, dass ich in C# nicht ganz konsequent runde - das sollte ich mir abgewöhnen und mich nicht darauf verlassen, dass 1.999999999... zu 2 wird.)

Woher ich das weiß:Berufserfahrung – Software-Entwickler
LycraLike  07.12.2022, 13:42

Bitte keine Casts an Programmier-Anfänger propagieren! Jeder Cast ist einer zu viel!

0
PWolff  07.12.2022, 14:08
@LycraLike

Der erste Cast ist ja schon im Beispielprogramm, und ich gehe davon aus, dass das so in der Vorlesung / im Kurs beigebracht wurde.

Aber was will man machen, wenn Math.floor() ein float/double zurückgibt? Außer eine eigene Bibliotheksfunktion bereitzustellen, aber das läuft dann nicht mehr auf Standard-Installationen.

0

Hier ist ein Beispiel für ein Java-Programm, das einen Würfel simuliert:

import java.util.Random; // Import the Random class

public class Dice {
  public static void main(String[] args) {
    Random rng = new Random(); // Create a Random object
    
    int roll; // Variable to store the result of the roll

    // Keep rolling until we get a number between 1 and 6 (inclusive)
    do {
      roll = rng.nextInt(6) + 1; // Roll the dice by generating a random number between 0 and 5, then adding 1
    } while (roll < 1 || roll > 6);

    System.out.println("You rolled a " + roll); // Print the result of the roll
  }
}

Das Programm erstellt ein Random Objekt, und verwendet dann die Methode nextINT() der Klasse Random ,um eine Zufallszahl zwischen 0 und 5 zu generieren. Die Zufallszahl wird dann um 1 erhöht, um sicherzustellen, dass sie zwischen 1 und 6 liegt. Dieser Vorgang wird solange wiederholt, bis eine gültige Würfelzahl generiert wurde. Anschließend wird das Ergebnis auf der Konsole ausgegeben.

Um einen Würfel in Java zu programmieren, der bis zu einer Zahl zwischen 1 und 6 "gewürfelt" wird, können Sie die Klasse

Random

verwenden, um zufällige Ganzzahlen zu generieren, und eine Schleife, um den Würfelvorgang zu simulieren.

Hier ist ein Beispiel für eine Java-Klasse, die einen Würfel simuliert:


Copy code
import java.util.Random; public class Dice { // Create a new Random object to generate random numbers private static Random random = new Random(); public static void main(String[] args) { // Roll the dice until we get a number between 1 and 6 int diceRoll; do { // Generate a random number between 1 and 6 diceRoll = random.nextInt(6) + 1; // Print the dice roll System.out.println("Dice roll: " + diceRoll); } while (diceRoll < 1 || diceRoll > 6); } }

In dem obigen Beispiel wird ein neues

Random

-Objekt erstellt, um zufällige Ganzzahlen zu generieren. Anschließend wird eine Schleife verwendet, um den Würfelvorgang zu simulieren, indem sie in jedem Durchlauf eine zufällige Zahl zwischen 1 und 6 generiert und auf der Konsole ausgibt. Die Schleife wird fortgesetzt, bis eine Zahl zwischen 1 und 6 gewürfelt wurde.

Um das obige Beispiel auszuführen, können Sie die Klasse

Dice

kompilieren

Mit neueren Java-Versionen geht das ganz einfach so:

import java.util.concurrent.ThreadLocalRandom;
...
int dicedNumber = ThreadLocalRandom.current().nextInt(1, 7);

Erzeugt eine Zufallszahl zwischen 1 und 6.