2017-01-22 5 views
0

演算子と乱数ジェネレータに問題があります。私は乱数ジェネレータがユーザーによって選択され、1,6,11,16として格納されているhと1とhの間の数を引くことを望んでいます。そして、if文が乱数を見て、私がプログラムしたことをするか、else文を実行してください。現時点では、if文だけを実行し、elseは実行していないようです(2番目のelse、最初のものはうまく動作します)。私が持っているコードはまたは演算子/乱数

 Random random = new Random(); 
     int ran = random.Next(1, h); 
     if (s1 == 0 & s2 == 0 & s3 == 1) 
     { 
      s3 = s3 - 1; 
      cover0.Visible = true; 
      p1slable.Visible = true; 
      p2slable.Visible = true; 
      playagain.Visible = true; 
      score.Visible = true; 
      p1score.Visible = true; 
      p2score.Visible = true; 
      c = c + 1; 
      p2slable.Text = "" + c.ToString(); 
      labelscore2.Visible = true; 
      winner2.Visible = true; 
      hintcover.Visible = true; 
      e1.Visible = false; 
      e2.Visible = false; 
      e3.Visible = false; 
     } 
     else 
     { 
      if (s1 == 0 & s2 == 0 & s3 == 2) 
      { 
       if (ran == 1 || ran == 3 || ran == 4 || ran == 5 || ran == 9 || ran == 10 || ran == 15) 
       { 
        s3 = s3 - 2; 
        cover0.Visible = true; 
        p1slable.Visible = true; 
        p2slable.Visible = true; 
        playagain.Visible = true; 
        score.Visible = true; 
        p1score.Visible = true; 
        p2score.Visible = true; 
        c = c + 1; 
        p2slable.Text = "" + c.ToString(); 
        labelscore2.Visible = true; 
        winner2.Visible = true; 
        hintcover.Visible = true; 
        e1.Visible = false; 
        e2.Visible = false; 
        e3.Visible = false; 
       } 
       else { s3 = s3 - 1; } 

であると私はC#の2015

+0

6にランしてみましたか? '声明)はまだですか? – WQYeo

+0

あなたの問題は理解するのが少し難しいです。あなたはいつも本当であるかどうかを明示してください。そして、デバッガでそれを実行して、どんな種類の値を取得しているか、そして期待どおりの値になっているかどうかを確認しましたか? –

+0

そこには少しのコードがありません。最初の 'else'の中の' if'はそれ自身 'else'節を持っていますか?あるいは、あなたのコードスニペットに欠けている中かっこを閉じるだけですか? – InBetween

答えて

2

まず第一を使用しています、あなたのコードは完全ではありません。私はあなたのスニペットに欠けているものは、単に2つの中かっこの中かっこであると仮定します。念頭に置いて

、よそIFSのこの混乱を理解することが少し楽になるようにコードをリファクタリングすることができます。

まず、s1s2を2回確認していますか?一度チェックしてs3にチェックすることができます。

また、多くの定数値で分岐する場合はswitchステートメントを使用します。その読みやすさとあなたのranチェックのような無限と醜いoringsの必要性を削除します。

var random = new Random(); 
var ran = random.Next(1, h); 

if (s1 == 0 && s2 == 0) 
{ 
    if (s3 == 1) //case handled: s1 = 0, s2 = 0, s3 = 1 
    { 
     s3 = s3 - 1; 
     //... etc. 
    } 
    else if (s3 == 2) //case handled: s1 = 0, s2 = 0, s3 = 2 
    { 
     switch (ran) //all cases handled 
     { 
      case 1: 
      case 3: 
      case 4: 
      case 5: 
      case 9: 
      case 10: 
      case 15: 
       s3 = s3 - 2; 
       //... etc. 
       break; 
      default: 
       s3 = s3 - 1; 
       break    
     } 
    }  
} // s1 != 0 or s2 != 0 will jump here 

[OK]を、今、我々は、それはこのように書かれていることを、その少し楽にどちらそうでない何を扱っている場合とについて推論します。

あなただけs1s2がゼロに等しいとs31または2のいずれかに等しい場合を扱うされています。それでおしまい。 s1,s2またはs3の他の値は、一致するifまたはelse句が見つからないため、コード全体を無視します。あなたの本当に欲しいものですか?

0

デバッガを実行したが、今はうまく動作していなかった理由と、デバッガが何をしていたか、何を行ったのか分かりません。私を助けてくれてありがとう。 (ちょっと試したことがありませんでしたが、デバッガだけで数週間ゲームを作っていました。(nim))