2016-10-18 3 views
0

Ich habe an einer Aufgabe für meine Einführung in die Java-Klasse gearbeitet, und ich kann mir nicht vorstellen, wie ich die zwei Dinge bewerkstelligen kann, die ich tun muss.Wie wiederholst du in einem yahtzee-Programm in Java?

Was ich jetzt habe: Ich habe ein Array erstellt, das fünf Würfel würfelt und die Ergebnisse anzeigt. Der Code, den ich habe, ist wie folgt ...

package operation.pkg7; 

import java.util.Random; 
import java.util.Scanner; 
public class Operation7 { 
public static void main(String[] args) 
{  


    int[] dice = new int[5]; 
Random r = new Random(); 

//This makes the dice 
for (int i = 0; i < 5; i++) { 
dice[i] = r.nextInt(6) + 1; 
} 
//This displays the dice rolls 
for (int i = 0; i < 5; i++) { 
System.out.print("Roll " + (i+1) + ":"); 
System.out.print(" " + dice[i] + " "); 
} 
System.out.println(); 
//.......................................... 
int[] counts = new int[6]; 
for (int i = 0; i < 6; i++){ 
counts[i] = 0; 
} 

//count up the values 
for (int i = 0; i < 5; i++) { 
int diceIndex = dice[i] - 1; 
counts[diceIndex]++; 
} 
System.out.println(); 
for (int i = 0; i < 6; i++){ 
System.out.println("The number of " + (i+1) + "s is : " + 
counts[i]); 
} 
} 
} 

Nun, ich gebe mir erfolgreich die Ergebnisse der Formwalzen, aber ich habe Probleme, herauszufinden, wie Re-Rollen zu tun. Dies ist ein Beispiel dafür, wonach das Programm gefragt werden soll, nachdem der ursprüngliche Würfelwurf angezeigt wurde ...

Roll 1: 2 Roll 2: 6 Roll 3: 1 Roll 4: 4 Roll 5: 2 

Would you like to re-roll any dice? y/n 
y 

Which dice would you like to re-roll? 1-5 
2, 3, 4 

Roll 1: 2 Roll 2: 3 Roll 3: 2 Roll 4: 3 Roll 5: 2 

Would you like to re-roll any dice? y/n 
n 

Roll 1: 2 Roll 2: 3 Roll 3: 2 Roll 4: 3 Roll 5: 2 

Das ist das Ziel. Sobald ich das mache, muss ich das Programm die bestmögliche Punktzahl anzeigen lassen ... Zum Beispiel, wenn es zwei Dreien und drei Zweien gibt, muss es sagen, dass es ein volles Haus ist, oder zeige Yatzzee, wenn es fünf gleiche sind Nummer usw.

Hat jemand einen Rat?

+0

Erstellen Sie ein anderes Array, kopieren Sie das erste Array in das neue Array. Jetzt würfle nochmal, aber setze die Werte nur in die Indizes 2,3,4 .. Du kannst das tun, indem Du es in If stmt unter einer for-Schleife vergleichst. Weißt Du auch, wie man Eingaben von den Benutzern akzeptiert? –

+0

Ich wollte eine int-Eingabe verwenden, um eine Position im Array anzugeben, um sie erneut zu randomisieren. Ich weiß, wie man Eingaben für einige Dinge verwendet, aber ich habe keine Ahnung, wie man mit Arrays und Eingaben arbeitet. – B1azingPh03nix

+0

Sie müssten Ihre Eingabewerte in ein anderes Array speichern und dann anfangen, damit zu vergleichen ... –

Antwort

0

Setzen Sie Ihren Code in eine Do-While-Schleife mit der Bedingung der Benutzereingabe, die vor der Do-While-Schleifenbedingungsprüfung platziert wurde.

0

Sie haben die Ergebnisse Ihrer Rollen speichern im dice Array müssen Sie einfach neue zufällige Ergebnisse für die Würfel in diesen Positionen erstellen. Z.B. Wenn Sie # 2 wiederholen, dann fügen Sie einen neuen Zufallswert in Index 1 ein.

Für die Bestimmung der verschiedenen Arten von Rollen wie Vollhaus werden Sie generische Logik für jedes definieren wollen. Sie könnten zum Beispiel eine Methode, wie definieren:

public static boolean isFullHouse(int[] diceRoll){ 
    //return true if the roll is a full house, false otherwise 
} 

Aber ich denke, was Sie wirklich wollen, nicht nur um zu bestimmen, ob eine Rolle ein volles Haus, sondern auch die Gesamtbilanz mit den Bewertungsregeln für das Szenario zu berechnen .

EDIT # 1:

Bevor Sie weiter bitte, auf ein Minimum, lesen Sie den Abschnitt über this page "über Hausaufgaben Vorstellung" betitelt.

Ich werde versuchen, zu veranschaulichen, wie ich denke, dass Sie eine Neuauflage durchführen könnten, ohne an dieser Stelle vollständigen Code bereitzustellen. Wie ich oben erwähnt habe, können Sie, da Sie den Benutzer fragen müssen, für welche Würfel er erneut rollen möchte, diese Eingabe verarbeiten und sie als Indices in Ihr Würfel-Array verwenden. Also, wenn die Benutzer 2,3,4 wie in Ihrem Beispiel verwenden Sie Scanner.getLine(), um diese Eingabe zu lesen und dann String Methoden verwenden, um es auseinander zu brechen. Sobald Sie die einzelnen Stücke haben, können Sie sie in int Werte unter Verwendung der Integer Klasse umwandeln. Ziehen Sie abschließend 1 von ihnen ab, um die Tatsache zu berücksichtigen, dass Ihre Würfel-Array-Indizes bei 0 beginnen.

Jetzt haben Sie ein Array mit Indizes in Ihrem Würfel-Array. Jedes Element in diesem neuen Array wird nur verwendet, um auf einen Index des Würfelarrays Bezug zu nehmen. So nennen wir dieses zweite Array userInput. Fortsetzung der 2,3,4 Beispiel userInput[0]=1, userInput[1]=2, userInput[2]=3.

Alles, was Sie tun müssen, ist Schleife durch userInput und jedes Mal durch die Schleife eine neue Zufallszahl erzeugen. Diese Zufallszahl wird dann im Würfel-Array am Index gespeichert, der an der aktuellen Position Ihres userInput Arrays gespeichert ist.

Um die bestmögliche Punktzahl zu bestimmen, könnten Sie, wie ich vorgeschlagen habe, für jede Methode individuelle Methoden schreiben, um festzustellen, ob sie vorhanden sind und dann eine andere Methode, um jede von ihnen aufzurufen und die größtmögliche Punktzahl zu melden.

Nehmen wir eine von ihnen als ein Beispiel wie 3 einer Art. Die einfachste Art, darüber nachzudenken, wäre vielleicht, alle möglichen Würfe (0 bis 6) zu durchlaufen, so dass Sie jedes Mal durch die Schleife zählen, wie viele von jeder Rolle im aktuellen Würfelwurf erscheinen. In Schleife 1 suchst du also drei 1 und in Schleife 2 nach drei 2 und so weiter.

Innerhalb dieser Schleife erstellen Sie eine weitere Schleife, um alle Würfel im aktuellen Würfelwurf (Ihr dice Array) zu durchlaufen und jedes Mal durch die Schleife zu überprüfen, ob der aktuelle Würfel die Nummer ist, die Sie gerade sind suche von deiner äußeren Schleife. Wenn es sich um die Nummer aus der äußeren Schleife handelt, erhöhen Sie einen Zähler (der in der äußeren Schleife definiert und initialisiert wird, aber außerhalb der inneren Schleife, sodass er jedes Mal zurückgesetzt wird, wenn die äußere Schleife inkrementiert wird), um anzuzeigen, wie viele dieser Zahlen Sie gefunden haben bisher.

Wenn der Zähler 3 erreicht, bevor die innere Schleife endet, wissen Sie, dass Sie 3 haben, also haben Sie die Methode return true, da Sie keinen Grund haben weiterzumachen (kann nicht 2 verschiedene 3 einer Art haben). Andernfalls sollte Ihre Methode false zurückgeben, um anzuzeigen, dass keine Übereinstimmung gefunden wurde.

Beachten Sie, dass Sie, wenn Sie ehrgeizig sein möchten, gute Programmierübungen ausüben und Code wiederverwenden können, indem Sie das Limit Ihres Zählers als Parameter für Ihre Methode festlegen, so dass Sie die gleiche Logik sowohl für 3 als auch 4 einer Art.

Hinweis Es gibt eine schlauere Methode, dies zu tun, aber ich dachte, dass dieser Ansatz konsistenter mit den Konstrukten sein würde, die Sie bereits kennen.

Ich hoffe, dass dies hilft, um loszulegen!

+0

Wie würden Sie das aber tun? Das war mein Problem, ich bin neu in Arrays und ich hatte niemanden, der mir beigebracht hat, was ich dafür brauche. Ich weiß, was zu tun ist, ich habe keine Ahnung, wie die Syntax oder die Methodik dahinter funktioniert. – B1azingPh03nix

+0

Auch muss es für jede Bewertung überprüfen. (zB ob es 2 von einer Art, 3 von einer Art, 4 von einer Art, kleine gerade, große gerade etc.) – B1azingPh03nix

+0

Es muss nicht eine nummerierte Punktzahl geben, es muss nur angeben, was die Win-Bedingungen könnte sein. – B1azingPh03nix

Verwandte Themen