2016-07-31 11 views
0

Zuerst entschuldige ich mich, wenn dies zuvor gefragt wurde und ich konnte es nicht finden. Ich habe die Tiefen des Internets auf der Suche nach Orientierung durchforstet, bin aber nicht erfolgreich gewesen.Generieren von Zufallszahlen in For-Schleife von externer Klasse

In meiner Programmierklasse II arbeiten wir daran, ein Programm für die Lotterie zu erstellen. Wir haben externe Klassen erstellt (im Klassenraum) und die Objekte verwendet, die in diesen Klassen in unserem Treiber erstellt wurden. Für diese Aufgabe erstellen wir ein Programm, das Lottozahlen ausgibt. Das Programm fragt den Benutzer, ob sie Pick 3, 4 oder 5 spielen, und soll dann für jeden "Ball" eine Zufallszahl ausgeben. In einer der separaten Klassen haben wir den Randomizer bereits importiert und instanziiert. Wenn ich jedoch das Array und die for-Schleife programmiere, während die richtige Anzahl von Ausdrucken erzeugt wird (3 Ausdrucke für 3, 4 Ausdrucke für 4 und 5 Ausdrucke für 5), wird keine neue Nummer für jede Schleife erzeugt. Stattdessen wird der erste Wert beibehalten und für jede Schleife danach ausgedruckt. Ich habe meinen Code unten eingefügt. Bitte helfen Sie!

import java.util.Scanner; 

public class LotteryGame2 { 

    public static void main(String[] args){ 

    //Declare and instantiate objects 
    PickGame2 pick = new PickGame2(); 
    Scanner keyboard=new Scanner(System.in); 
    pick.activate(); 

    //Ask for and obtain user input 
    System.out.print("Are you playing Pick 3, Pick 4, or Pick 5? Enter number here: "); 
    int numberOfGame=keyboard.nextInt(); 
    PickGame2[] gamenumber=new PickGame2 [numberOfGame]; 

    for (int i=0; i<gamenumber.length; ++i){ 
     int ball=pick.pullBall(); 
     System.out.println("Ball " + (i+1) + " is " + ball); 
    }//Ending bracket of for loop 

    //Close Scanner object 
    keyboard.close(); 

    }//Ending bracket of main method 
}//Ending bracket of class LotteryGame2 

Die externen Klassen sind wie folgt:

private int ball; 
private Random randomizer; 

public LotteryContainer(){ 
    this.ball=0; 
    this.randomizer=new Random(); 
}//Ending bracket of constructor 

public void activate(){ 
    this.ball=this.randomizer.nextInt(9) + 1; 
}//Ending bracket of method activate 

public int getBall(){ 
    return this.ball; 
}//Ending bracket of method getBall 

und

private LotteryContainer machine; 

public PickGame2(){ 
    this.machine=new LotteryContainer(); 
}//Ending bracket of constructor 

public void activate(){ 
    this.machine.activate(); 
}//Ending bracket of method activate 

public int pullBall(){ 
    return this.machine.getBall(); 
}//Ending bracket of pullBall 
+0

Der Code, den Sie anzeigen, erstellt ein Array und iteriert es. Es gibt jedoch keine einzige Zuweisung zu einem der Array-Elemente. Fehlt dir etwas wie 'gamenumber [i] = ...'?! – GhostCat

+0

externe Klassen: { \t \t private LotteryContainer Maschine; \t \t öffentliche PickGame2() { \t \t this.machine = new LotteryContainer(); \t} \t \t public void activate() { \t \t this.machine.activate(); \t} \t \t public int pullBall() { \t \t Rückkehr this.machine.getBall(); \t} \t } importieren java.util.Random; öffentliche Klasse LotteryContainer { \t \t private Int Ball; \t private Random Randomizer; \t \t public LotteryContainer() { \t \t this.ball = 0; \t \t this.randomizer = neu Random(); } \t \t \t public void Activate() { \t \t this.ball = this.randomizer.nextInt (9) + 1; \t} \t \t public int getBall() { \t \t Rückkehr this.ball;} – SMcGwier

+0

@GhostCat, ich bin nicht sicher, was Sie meinen, wie es keine Zuweisungen haben. gamennumber hängt vollständig von den Benutzereingaben ab und dann, basierend auf dieser Eingabe, druckt die for-Schleife so viele Bälle aus, wie nötig sind. – SMcGwier

Antwort

0

Wenn Sie an Ihrem PickGame2 Klasse anschauen, werden Sie sehen, dass es eine LotteryContainer zum Aufnehmen der Kugeln verwendet . Und die LotteryContainer hat zwei Methoden - eine, die eine Nummer für den Ball (activate) und eine, die die Ballnummer zurückgibt, die ausgewählt wurde (getBall). Da Sie nur pullBall in PickGame2 anrufen, und pullBall nur Anrufe getBall von LotteryContainer, bedeutet es, dass Sie nie die activate Methode anrufen, die Sie einen neuen Ball bekommt.

Fügen Sie einen Anruf zu activate vor jedem Anruf zu pullBall hinzu, und Sie werden jedes Mal eine andere Nummer erhalten.

(Eigentlich ist es möglich, dass ein Zufallszahlengenerator die gleiche Nummer mehrmals generiert. Ich weiß nicht, was die Spezifikation Ihrer Hausaufgaben war, aber wenn es eine "echte" Lotterie simuliert, wo jeder Ball ist anders, dann nur Zufallszahlen generieren und anzeigen ist nicht genug).

+0

Also, obwohl es am Anfang des Programms instanziiert aktivieren muss ich um es auch in meine Schleife zu fügen? Zuerst dachte ich, es ist zufällig zufällig drei gleiche Nummer zufällig, aber nach dem Ausführen des Programms mehrere Male habe ich festgestellt, dass die Nummer auf der ersten Schleife durch und erhalten wird dann für die folgenden Schleifen gehalten werden – SMcGwier

+0

@SMcGwier ja - schau was die Methoden tun. Die 'getBall' Methode gibt nur den aktuellen Wert eines Feldes zurück. Es ändert das Feld nicht und macht nichts mit dem Zufallszahlengenerator. Daher gibt es immer den gleichen Wert zurück, wenn Sie nicht 'activate' erneut aufrufen. Ein Computerprogramm tut nur das, was darin geschrieben ist, nicht mehr und nicht weniger. – RealSkeptic

+0

DANKE SO VIEL! Ich merke jetzt, wenn ich die Schleife für das gesamte Programm aktiviert hätte, müsste ich die zweite nicht aktivieren, aber das ist nicht die Art, wie ich das Programm ausführen muss. Ich bin neu im Programmieren (offensichtlich), daher wird jede Hilfe, die ich erhalte, sehr geschätzt. – SMcGwier