0

サイコロを 2 つ振ったときの値を返すプログラムを書いています。ユーザーが特定の種類のサイコロを選択したり、カスタムの面数を選択したりできるようにしたいと考えています。たとえば、私は三角形のサイコロを選びました。3 面のサイコロになります。

変数:

private int die = 1;
private int preselectedSides;

メニューを処理するために作成したスイッチの場合は、次のようになります。

switch(selection)
      case 1:
      premadeDice(3, 4, 6);
      x=1;
      break;

受信方法は次のようになります。

//premade Dice Selection//
public int premadeDice(int triangle, int rectangle, int cube)
{         
    String choice;
    boolean flag = false;
    while (flag == false)
    {
        System.out.println("Enter in the shape you want your die to be");
        System.out.println("A triangle die has 3 sides. If this is what you want, type     \"triangle\"");
        System.out.println("A rectangle die has 4 sides. If this is what you want, type     \"rectangle\"");
        System.out.println("A cube die has 6 sides. If this is what you want, type     \"cube\"");
        choice = sc.next();

        if (choice.equalsIgnoreCase("triangle"))
        {
          System.out.println("You have chosen the triangle die."); 
          preselectedSides = triangle;
          flag = true;
        }

        else if (choice.equalsIgnoreCase("rectangle"))
        {
          System.out.println("You have chosen the rectangle die."); 
          preselectedSides = rectangle;  
          flag = true;
        }

        else if (choice.equalsIgnoreCase("cube"))
        {
          System.out.println("You have chosen the  traditonal cube die."); 
          preselectedSides = cube; 
          flag = true;
        }

        else
        {
            System.out.println("You have not entered in a valid die shape. Try again");
        }
    }//end while loop

    return preselectedSides;

}//end pre-made dice method

その戻り値にアクセスするためのゲッターを作成しました。

//getter for Die
public void getDie()
{
   System.out.println(preselectedSides);
}

次のように呼び出します。

test.getDie();

そして、立方体に対して次の出力を取得します (または、他の形状に対しては、値とともに 1 を取得し続けます) 1 6

この論理エラーを見つけようとしましたが、表示されません。なぜナンバーワンを出力し続けるのですか?必要に応じて説明を求めます。

4

1 に答える 1

0

これは非常に多くのコードのようです。次のように単純化できます。

public class Die  
{  
   int sides;
  //get/set/constructor  
   ...
}  


public class DieRoller  
{  
    Die die;  

    public int roll()  
    {  
       Random generator = new Random();  
       return generator.nextInt(this.die.getSides());
    }  
}  

次のように実行できます。

public static void main(String[] args)  
{  
    System.out.println("Number of sides?");  
    Scanner sc = new Scanner(System.in);  
    Die currentDie = new Die(sc.nextInt());  
    System.out.println("Rolling");
    DieRoller roller = new DieRoller(currentDie);  
    int sideRolled = roller.roll();  
    System.out.println(String.format("You rolled %d on your %d sided die",sideRolled,currentDie.getSides()));
}  
于 2012-11-02T16:06:13.557 に答える