0

私はJavaの初心者で、オンラインで練習問題をやっています.私はこの質問に出くわし、かなり長い間立ち往生していました.

ユーザーに目的の合計を要求する diceSum という名前のクラスを作成し、合計が目的の合計になるまで 2 つの六面体のサイコロを繰り返し転がします。ユーザーとの予想される対話は次のとおりです。

Desired dice sum: 9
4 and 3 = 7
3 and 5 = 8
5 and 6 = 11
5 and 6 = 11
1 and 5 = 6
6 and 3 = 9

これは私がやったことです。

import java.util.Random;
import java.util.Scanner;
public class diceSum{
    public static void main(String[] args){
        System.out.print("Desired dice sum: ");
        Scanner sc=new Scanner(System.in);
        int input=sc.nextInt();

        Random rnd=new Random();
        int r1=rnd.nextInt(7);
        int r2=rnd.nextInt(7);

        int sum=0;
        for(int i=0;i<6;i++){
             sum=r1+r2;
            System.out.println(r1 + "and" + r2 + "=" + sum);

        }

    }
}

私の出力は

Desired dice sum:9
0 and 2=2
0 and 2=2
0 and 2=2
0 and 2=2
0 and 2=2
0 and 2=2

別の乱数を指定せずに 0 と 2 を 6 回出力する理由がわかりません。int r3=rnd.nextInt(7),int r4=rnd.nextInt(7) をさらにいくつか作成する必要があるかどうかを考えています。しかし、私はそれが長くなると思っていましたが、それは可能な方法です。

4

3 に答える 3

3

使用する:

int r1;
int r2;
for(int i=0;i<6;i++){
     r1=rnd.nextInt(6) + 1;
     r2=rnd.nextInt(6) + 1;
     sum=r1+r2;
     System.out.println(r1 + "and" + r2 + "=" + sum);
     if (sum == input){
         // This will break once you get the value.
         break;
     }
}

続行して新しい乱数を取得するには。またrnd.nextInt(6) + 1、1 ~ 6 (0 なし) を取得するために使用します。

あなたの課題は、6回だけではなく、見つけるまでチェックを続けることです。while代わりにループを使用する必要があります。

于 2013-03-10T13:28:58.777 に答える
1
int r1;
int r2;
for(int i=0;i<6;i++){
     r1=rnd.nextInt(6) + 1;
     r2=rnd.nextInt(6) + 1;
     sum=r1+r2;
     System.out.println(r1 + "and" + r2 + "=" + sum);
     if (sum == input){
         break;
     }
}

しかし、ここでも次のような同じ数字を取得することはできません

4 and 3 = 7
3 and 5 = 8
5 and 6 = 11
5 and 6 = 11
1 and 5 = 6    
6 and 3 = 9
于 2013-03-10T13:29:06.110 に答える
1

r1andの宣言/初期化をr2ループに移動する必要があります。それ以外の場合、それらは一度設定され、残りのプログラムの実行を通じてそのまま残ります。

この割り当ては、6 回投げるように要求するのではなく、目的の合計に到達するために必要な回数だけ実行するように要求することに注意してください。ループを確実に停止できるようにするには、入力した数が少なくとも 2 で、多くても 12 であることを確認する必要があります。

さらに、これは間違っています:

int r2=rnd.nextInt(7);

0 から 6 までの数字が得られますが、実際のさいころを投げても 0 になることはありません。代わりに、書く必要があります

int r2=rnd.nextInt(6)+1;

ループは次のようになります。

int sum;
do {
    int r1=rnd.nextInt(6) + 1;
    int r2=rnd.nextInt(6) + 1;
    sum=r1+r2;
    System.out.println(r1 + "and" + r2 + "=" + sum);
} while (sum != input);
于 2013-03-10T13:29:11.050 に答える