2017-02-13 2 views
-1

hier erzeugt ist mein Code:Random (Samen) .nextInt immer 0 erzeugen für die erste Zahl

import java.util.*; 
public class RandGen 
{ 
    Random rd; 
    static final int SIZE = 1; 
    int[] result = new int[SIZE]; 
    public RandGen(int seed) 
    { 
     rd = new Random(seed); 
     for(int i=0;i<SIZE-1;i++) 
     { 
      result[i] = rd.nextInt((int) Math.pow(10,9)+1); 
     } 
    } 
} 

Sie die Größe konstant für größere Feldgröße ändern können, aber die Random rd.nextInt immer erzeugen die erste Zahl zu 0.

+0

Welchen Wert übergeben Sie als Samen? – nasukkin

+0

Warum setzen Sie den Seed explizit? –

+0

egal was Seed ich hinter es wird 0 – paradox

Antwort

7

So ist das Problem mit Ihrer for Schleife, sagt Ihr logischer Test grundsätzlich "Solange 0 kleiner als 0 ist" Inkrement i. SIZE 1 und Sie setzen SIZE-1 die 0.

bearbeiten gleich: erwähnt Wie T. J. Crowder und JB Nizet unten setzt die for Schleife nie den Wert des letzten Elements im Array, weil es nur für SIZE-1 Elemente ausgeführt werden würde, und die Schleife wird nie eingegeben.

+2

... und so wird 'random [0]' nie auf irgendeinen Wert gesetzt, weil der Körper der Schleife niemals läuft, und so behält er seinen Standardwert von 0 und scheint daher "0" als erstes Zufallsobjekt zu erhalten Nummer. –

+0

OP sagt eindeutig, dass zunehmende Array-Größe nicht geholfen hat. – Mordechai

+0

ändere die GRÖSSE auf 2 oder eine beliebige Zahl, es wird dir 0 geben, btw der Wert von Samen ist auch beliebig. – paradox

2

Es gibt zwei Probleme, die ich hier sehen:

  1. Wie Umriss durch die andere Antwort, Ihre Schleifenbedingung „off durch ein“ ist; in seiner aktuellen Version ist diese Schleife nie eingegeben; und damit bleibt das Array einfach "initial" -Wert (alle Nullen)
  2. Wenn Sie den Code immer mit dem gleichen Seed aufrufen, dann ... dann gibt es dort keine "Zufälligkeit". Dann wird die Sequenz immer gleich sein. Das ist der Punkt der Verwendung von Samen!
+0

omg mein Problem war so dumm, ich sehe es jetzt! Danke – paradox

0

Wenn Sie ein Array der Größe SIZE verwenden, befinden sich seine Positionen im Intervall 0..SIZE-1. Um dann alle Werte im Array zu durchlaufen, sollte die for Schleife for(int i=0;i<SIZE;i++){} sein. Da Sie int i=0;i<SIZE-1 haben und SIZE gleich 1 ist, tritt das Programm nie für diese Schleife ein. Wenn Sie einen größeren SIZE hätten, würde die for-Schleife niemals den letzten Index Ihres Arrays berühren.

Verwandte Themen