Zufallszahl funktioniert nicht

Javafan21

Mitglied
Sehr geehrte Mitglieder des Java-Forums,
führe ich folgendes Programm durch,

Java:
public class Beispiel {
public static void main(String[]args) {
  int i = (int)Math.random() *10;
  System.out.println(i);
}
}

so erhalte ich immer 0 als Ausgabe. Wie kann ich dies fixen?
Vielen Dank schon mal im Voraus
Mit freundlichen Grüßen
Javafan21
 
Zuletzt bearbeitet von einem Moderator:
Der untere Teil mit "@SuppressWarning("all")public class Love{...}" ist seine Signatur und nicht Teil der eigentlichen Antwort.
Du sollst halt einfach statt:
Java:
int i = (int)Math.random() *10;
das hier schreiben:
Java:
int i = (int)(Math.random() *10);
 
man könnte ihm das natürlich auch genau erklären - dafür ist dieses Forum doch da, oder?

Math.random liefert einen Zufallswert zwischen 0.0 und 0.9. In deinem Beispiel castest du das nun den Zufallswert von einem Double auf einen Integer was bedeutet, dass er einfach alle Ziffern nach dem Kommata abschneidet. Das Ergebnis deiner Rechnung ist somit immer 0 x 10 und das ergibt nun mal immer 0.

Weil:
0.0 = 0 *10 = 0
0.1 = 0 *10 = 0
0.2 = 0 *10 = 0
0.3 = 0 *10 = 0
...
0.9 = 0 *10 = 0

Wie die anderen aber bereits völlig richtig geschrieben haben, kannst du natürlich den Cast auf den kompletten Ausdruck anwenden.

int i = (int) Math.random() *10; -> int i = (int)(Math.random() *10);
 
Natürlich. Jeder darf seine Zeit hier so verschwenden, wie er/sie es für richtig hält.

Wir müssen hier keine Grundsatzdiskussion führen. Falls in Zukunft jemand dieses Problem hat, danach googled und hier auf der Seite landet, er eben keine für sich zufriedenstellende Lösung erhalten und einen neuen Thread starten wird. Dort beschweren sich dann wieder alle anderen, warum man denn die Forensuche nicht genutzt hat weil das Thema ja schon x-mal behandelt wurde, usw... manchmal ist es eben nicht so wie es auf den ersten Blick zu sein scheint und eben keine Zeitverschwendung.
 
Wenn du glaubst, dass es hier Defizite in den Antworten gibt, dann schreib halt einfach eine bessere Antwort, aber bitte nicht mit irgendeinem Unterton im Sinne von "warum habt ihr das hier nicht schon lange so erklärt, ...okay, dann mach ich das mal."
Niemand unterliegt hier irgendeiner Obligation, qualitativ hochwertige Antworten zu schreiben, zumal die Qualität einer Antwort eben im Sinne des Betrachters liegt.
 
Man könnte natürlich noch viel genauer und ausdifferenzierter in der Antwort werden. Oder @looparda s Ansatz verfolgen: Funktioniert das? Nein. Funktioniert das? Nein. ... Bis es doch mal richtig ist. Oder meinen operativ- bzw. @QU3LLC0D3 s deklarativ-beschreibenden Ansatz verfolgen. Nur nützt das dem TE alles nichts, wenn ihm das nicht mehr interessiert. Nur für nachfolgende Besucher welche sich möglicherweise hierher verirren wäre das des Durchlesens wert.
 
Noch ein klein wenig Klugsch..erei
Mit diesem Code wird's etwas leserlicher, die Methode macht genau das, was du manuell gemacht hast:
Java:
new Random().nextInt(10);

Wenn du mehrere Zufallszahlen brauchst, empfiehlt es sich, nur eine Instanz von Random() zu erzeugen.
Falls du bei jedem Testlauf die gleiche Zahlenfolge haben willst, dann übergib Random als Parameter immer den gleichen Long-Wert (Standardmäßig holt es sich den Wert aus System.currentTimeMillis, ist also immer anders).
 
Es ging hier doch nicht um Schönheit 😳 sondern nur darum warum genau ein bestimmter Fehler auftritt. 😉
Ich denke, die meisten sind daran interessiert, dass das Programm funktioniert. Der Titel "Zufallszahl funktioniert nicht" klingt zumindest danach, als ob es ihm darum ging, dass die Zufallszahl funktionieren sollte. Ich kann mich natürlich auch täuschen.

Aber wie gesagt ... "Noch ein klein wenig Klugsch...erei". Das war nur noch ein kleiner Anhang, wie man's etwas eleganter hinkriegen kann.
 
Ich denke, die meisten sind daran interessiert, dass das Programm funktioniert. Der Titel "Zufallszahl funktioniert nicht" klingt zumindest danach, als ob es ihm darum ging, dass die Zufallszahl funktionieren sollte. Ich kann mich natürlich auch täuschen.

Aber wie gesagt ... "Noch ein klein wenig Klugsch...erei". Das war nur noch ein kleiner Anhang, wie man's etwas eleganter hinkriegen kann.
Ja, ich wollte, dass es funktioniert.
Vielen Dank!
 
Alles Blödsinn, so geht das richtig:
Java:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;


class RandNum
{
    public static void main(String[] args)
    {
        System.out.println("Your random number is: " + getRandomNumber(1, 10));
    }

    public static int getRandomNumber(int min, int max)
    {
        try
        {
            String url =
                "http://www.random.org/integers/?num=1&min=" + min + "&max=" + max + "&col=1&base=10&format=plain&rnd=new";
            BufferedReader in = new BufferedReader(new InputStreamReader(new URL(url).openStream()));
            String randNumber = in.readLine();
            in.close();
            return Integer.parseInt(randNumber);
        }
        catch (Exception e)
        {
            return 42;
        }
    }
}
 

Zurück
Oben