0

ユーザーが転がしたい面の数とサイコロの数を入力し、サイコロごとにロールを出力する単純なサイコロプログラムを作成しようとしています。ユーザーが以前に入力した情報を再入力することなく、同じ面数の同じ数のサイコロを再ロールできるようにする while ループを含めました。私が抱えている問題は、「while」ループの「if」ステートメントで「q」メソッドを呼び出すと、サイコロが再ロールされないことです。アドバイス?:

    import java.util.Random;
    import java.util.Scanner;

    public class Choice_Dice { 
static int t = 0, sides, c=0, d =0;
public static void main(String [] Mack){
    Scanner scan = new Scanner(System.in);
    String y ="y";
    System.out.println("You may roll a dice with any number of sides");
    System.out.println("Enter the number of sides you would like to the dice to have: ");
    sides = scan.nextInt();
    System.out.println("Enter the number of dice you want to roll: ");
    t = scan.nextInt();
    q();
    while(y.equals("y"))
    {
        System.out.println("Would you like to roll again(y or n): ");
        y = scan.next();
        if(y.equals("y")){
            q();
        }
        else
            System.out.println("Thanks");
    }
}
public static void q()
{
    int[] x = new int[t];
    c = 0;
    while(c != t)
    {
        x[c] = roll(sides);
        c++;
    }
    while(d != t)
    {
        System.out.println("You rolled " + x[d]);
        d++;
    }
}
public static int roll(int s)
{
    Random generator = new Random();
    int dice = 0;
    dice = generator.nextInt(4) + 1;
    return dice;
}

}

4

3 に答える 3

0

それはあなたの使用に帰着しますd。の値をリセットすることを忘れてcいませんでしたが、 ではありませんd

public static void q()
{
    // Init variables
    int[] x = new int[t];
    c = 0;
    d = 0;

    while(c != t)
    {
        x[c] = roll(sides);
        c++;
    }
    while(d != t)
    {
        System.out.println("You rolled " + x[d]);
        d++;
    }
}

andを静的クラス変数にする理由はcありません。d代わりに、次のように、メソッド呼び出しでそれらを正しく宣言する必要がありますx

public static void q()
{
    // Init variables
    int[] x = new int[t];
    int c = 0;
    int d = 0;

    while(c != t)
    {
        x[c] = roll(sides);
        c++;
    }
    while(d != t)
    {
        System.out.println("You rolled " + x[d]);
        d++;
    }
}
于 2013-10-08T22:00:19.067 に答える
0

問題は

while(d != t)
{
    System.out.println("You rolled " + x[d]);
    d++;
}

dロールを印刷している間ずっと、たとえば 4 にインクリメントします。このメソッドが終了すると、whileループが開始され、入力します"y"。メソッドが再度呼び出されると、d値が になりますが4、なぜtまた値4が soになりd == tます。リセットするか、適切なforループを使用して反復する必要があります。

醜い方法は

public static void q()
{
    int[] x = new int[t];
    c = 0;
    while(c != t)
    {
        x[c] = roll(sides);
        c++;
    }
    while(d != t)
    {
        System.out.println("You rolled " + x[d]);
        d++;
    }
    d = 0;
}

きれいな方法は

public static void q()
{
    int[] x = new int[t];

    for (int i = 0; i < x.length ; i++) {
        x[i] = roll(sides);
        System.out.println("You rolled " + x[i]);

    }
}

したがって、変数xc static変数を削除します。t簡単なリファクタリングで取り除くこともできます。


ちなみにあなたは使っていませんsides

于 2013-10-08T21:58:24.337 に答える
0

ケースwhileループに対してこのロジックを試します

 while(true)
{
    System.out.println("You may roll a dice with any number of sides");
    System.out.println("Enter the number of sides you would like to the dice to have: ");
    sides = scan.nextInt();
    System.out.println("Enter the number of dice you want to roll: ");
    t = scan.nextInt();
    q();

    System.out.println("Would you like to roll again(y or n): ");
    y = scan.next();
    if(y.equals("n")){

        System.out.println("Thanks");
        break;
    }


}

メソッド q() のロジックも確認してください。そこで値をリセットする必要があります

于 2013-10-08T22:09:45.233 に答える