2016-11-17 12 views
0

私は、6面のダイから乱数を返すプログラムを作成しています。また、2番目のダイスの面の量をユーザーに尋ねる文字列を取ります。ユーザが2,4,8,10,12,20,100の数字を入力すると、ダイスはその多くの面で役割を果たす。ユーザーがそれ以外の数字を入力した場合、2番目のダイスよりも6面のダイスが必要です。私たちの問題は、ユーザーが与えられた値以外の数値を入力した場合、0を返します.6面のダイであるため、1から6までの乱数を返す必要があります。私たちのコードを修正する方法に関する提案はありますか?Die Rolling Game

//Blueprint 
public class Die{ 
private int numSides; 
private int sideFacingUp; 
public int die1; 
public int die2; 
public int num; 


public Die() 
{ 
    roll(); 
} 
public Die(int number) 
{ 
num = number; 
    if(num==2||num==4||num==8|num==10||num==12||num==20||num==100) 
    { 
    roll2(num); 
    } 
    else 
    { 
     roll(); 
    } 
} 
public void roll() 
{ 
    die1= (int)(Math.random()*6)+1; 
} 
public void roll2(int no) 
{ 
    die2 = (int)(Math.random()*no)+1; 

} 
public int getDie1() 
{ 
    //System.out.println("I m here"); 
    return die1; 
} 
public int getDie2() 
{ 
    return die2; 
} 

} 


//actual program 
import java.util.Scanner; 
public class DieTester{ 
public static void main(String[] args){ 
int num; 
Die D1 = new Die(); 
Scanner s1 = new Scanner(System.in); 
System.out.println("The Value of the First Die:"+D1.getDie1()); 
System.out.println("Enter number of Die you want to create"); 
num = s1.nextInt(); 
Die D2 = new Die(num); 

System.out.println("The Value of the Second Die:"+D2.getDie2()); 

} 
} 
+0

ようこそ!デバッガの使い方を学ぶ必要があるようです。 [補完的なデバッグ手法](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)にご協力ください。その後も問題が残っている場合は、もう少し詳しくお聞かせください。 –

+1

最初のステップ:ダイのクラスでdie1とdie2を取り除き、dieFaceを作成します。あなたはこの間違ったことを考えています。あなたが戻したい唯一の価値は、2つの異なるダイスではなく、ダイスのトップです。またroll2を取り除く。あなたはそれを必要としません。 die1とdie2はdieFaceになり、dieFaceだけを返します。 – Sedrick

+0

あなたのメインでは、「作成したいダイの番号を入力してください」という質問はここでうまく聞こえません。質問は、 "あなたは2番目のダイにどのくらい多くの面や顔を持たせたいのですか?" – Sedrick

答えて

2

getDie2()に問題があります。

roll()に電話するときには、番号をdie1に割り当てます。

ユーザーが3に入ったのであれば、それはroll()を呼び出し、die1代わりのdie2にランダムな値を割り当て、intのデフォルト値は常に0です。だからあなたは0を得ている。

getDie2()を変更して0の値を確認してください。

public int getDie2() 
{ 
    if(die1 == 0) // die1 will be 0 because roll2() is called. So return die2 
    { 
     return die2; 
    } 
    else   // die2 will be 0 because roll() is called. So return die1 
    { 
     return die1; 
    } 
} 

ので、この不要なチェックを取り除くdie1die2を削除し、関係なく、金型の、ダイの面のための一つの値だけを使用します。このよう

:スタックオーバーフローへ

public class Die{ 

private int sideFacingUp; 
private int numSides; 


public Die() 
{ 
    roll(); 
} 
public Die(int number) 
{ 
    numSides = number; 
    if(numSides==2||numSides==4||numSides==8|numSides==10||numSides==12||numSides==20||numSides==100) 
    { 
    roll2(numSides); 
    } 
    else 
    { 
     roll(); 
    } 
} 
public void roll() 
{ 
    sideFacingUp= (int)(Math.random()*6)+1; 
} 
public void roll2(int no) 
{ 
    sideFacingUp = (int)(Math.random()*no)+1; 

} 
public int getDie() 
{ 
    //System.out.println("I m here"); 
    return sideFacingUp; 
} 

} 
+0

だから、私は2つのデータフィールドが必要だと言います.1つはダイの面の数を格納し、もう1つは現在どの面が上を向いているかを格納します。私はあなたがデータフィールドの上を向いている側を使用していることがわかりますが、numSidesはどうですか?データフィールドは、何もしていないように見えますか? – Angie

+0

@Angie私はそれを削除するのを忘れたと思う。それは役に立たない。私は 'num'を意味する。 'num'の代わりに' numSides'を使うことができます。なぜなら、より読みやすいからです。 – SkrewEverything