2016-10-18 17 views
0

私はJavaクラスへのイントロの課題に取り組んできました。私がやるべき2つのことを達成する方法を理解することはできません。Javaのyahtzeeプログラムでリロールするにはどうすればよいですか?

今私が持っているもの:5つのダイスをロールして結果を表示する配列を作成しました。次のように私が持っているコードは、私が成功した私に金型ロールの結果を与え、...今

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]); 
} 
} 
} 

ですが、私は再ロールを行う方法を考え出すの問題を抱えています。これは、最初のダイスロールを表示した後にプログラムが求めているものの例です...

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 

これは目標です。私がそれをしたら、私はプログラムが最高のスコアを表示するようにする必要があります...例えば、2つの3つと3つの2つがある場合、それはフルハウスであると言う必要があります。番号など

誰でもアドバイスをお持ちですか?

+0

別の配列を作成し、最初の配列を新しい配列にコピーします。今度はサイコロをもう一度転がしてください.2,3,4のインデックスだけに値を置いてください。forループの下でif stmtを比較することでそれを行うことができます。ユーザーからの入力を受け入れる方法も知っていますか? –

+0

私はint型入力を使って、配列内の位置を指定して再ランダム化するつもりでした。私は入力をいくつかのものに使う方法を知っていますが、配列と入力をどのように扱うかはわかりません。 – B1azingPh03nix

+0

あなたは入力値を別の配列に格納してからそれと比較を開始する必要があります... –

答えて

0

do-whileループ条件チェックの前にユーザーの入力条件を入れてdo-whileループにコードを挿入します。

0

dice配列にロールストアの結果があります。これらの位置にあるサイコロの新しいランダムな結果を作成するだけで済みます。例えば。 #2をリロールした場合、インデックス1に新しいランダムを入れてください。

フルハウスなどのさまざまなタイプのロールを決定する場合は、それぞれに汎用ロジックを定義する必要があります。しかし、私はあなたが本当にしたいことはロールが満員の場合だけで決定することはないと思うが、またそのシナリオのためのスコアリングルールを使用して、合計スコアを計算するために

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

:あなたは、例えばのような方法を定義できます。

EDIT#1:任意のさらなるください入る前に

、最低でも、 "宿題について尋ねる" というタイトルthis pageのセクションをお読みください。

この時点で完全なコードを入力せずにリロールを達成する方法を説明しようとします。上で述べたように、あなたがリインチする予定のダイスをユーザーにプロンプ​​トする必要があるので、その入力を処理してダイスアレイにインデックスとして使用できます。あなたの例のようにユーザ2,3,4がScanner.getLine()を使用してその入力を読んでから、Stringの方法を使ってそれを分解してください。個々の作品を入手したら、Integerクラスを使用してintの値に変換できます。最後に、あなたのダイス配列が0から始まるという事実を調整するために1を引いてください。

あなたのダイス配列にインデックスが入っている配列があります。この新しい配列の各項目は、ダイス配列のインデックスを参照するために使用されます。だから、この2番目の配列をuserInputと呼ぶことにしましょう。 2,3,4例を続ける。userInput[0]=1,userInput[1]=2,userInput[2]=3

あなたがする必要があるのは、userInputをループし、ループを通過するたびに新しい乱数を生成することだけです。この乱数は、userInput配列の現在の位置に格納されているインデックスのダイス配列に格納されます。

私が示唆したように、可能な限り最高のスコアを決定する方法として、各メソッドが存在するかどうかを判断する個別のメソッドを作成し、それぞれを呼び出して最大のスコアを報告する別のメソッドを記述します。

3つの種類のような例を挙げてみましょう。おそらく最も簡単な考え方は、金型の可能なすべてのロール(0〜6)をループすることです。ループを通過するたびに、現在のダイスロールに表示されるロールの数を数えます。ループ1では3つの1を探し、ループ2では3つの2を探します。

このループの内側には、現在のダイスロール(あなたのdice配列)内のすべてのダイスを繰り返しループするループが作成され、ループのたびに現在のダイが現在の番号であるかどうかがチェックされますあなたの外側のループから探しています。それが外側のループからの数であれば、(外側のループで定義され初期化されているが内側のループの外側で初期化されているので)カウンターをインクリメントして、これまでのところ。

内側のループが終了する前にカウンタが3に達すると、あなたは3種類のKindがあることを知っていますので、続ける理由がないので、return trueの方法があります。それ以外の場合は、一致しなかったことを示すためにメソッドはfalseを返す必要があります。

注:あなたが野心的でありたいのであれば、あなたのカウンターの限界をあなたのメソッドのパラメーターにすることで、良いプログラミング練習をし、コードを再利用することができます。 4種類の種類。

ヒントこれを行うもっと巧妙な方法がありますが、私はこのアプローチがあなたがすでに知っている構成と一貫していると思っていました。

私はこれがあなたを始められるのに役立つことを願っています!

+0

どうしますか?それは私の問題でした、私は配列に新しい、私は実際に私がこれを行う必要がある誰かを教えていない。私は何をする必要があるか知っている、私はちょうどそれの背後にある構文や方法論が動作するか分からない。 – B1azingPh03nix

+0

また、スコアリングをチェックする必要があります。 (種類が2種類、種類が3種類、種類が4種類、小ストレート、大ストレートなど) – B1azingPh03nix

+0

番号付きのスコアを与える必要はなく、勝利条件になり得る。 – B1azingPh03nix

関連する問題