2017-01-22 5 views
0

У меня возникают проблемы с генератором или генератором случайных чисел. Я хочу, чтобы генератор случайных чисел вытащил число между 1 и h с h, выбранным пользователем и сохраненным как 1,6,11 и 16, тогда я хочу, чтобы оператор if просмотрел случайное число и решил, делать то, что я запрограммировал или пойти, и выполнить инструкцию else. На данный момент кажется, что он выполняет только оператор if, а не другой (второй, первый работает отлично). Код у меня естьИли оператор/случайное число

 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

вы пробовали установку 'ran' до 6 (или какое-то другое значение, которое переместит его в' else 'заявление)? – WQYeo

+0

Ваша проблема немного трудно понять. Не могли бы вы четко указать, что, если это всегда так? И вы попытались запустить его в отладчике, чтобы проверить, какие значения вы получите, и соответствуют ли они тому, что вы ожидаете. –

+0

вам не хватает кода. У 'if' внутри первого' else' есть '' предложение 'else'? Или просто закрывать фигурные скобки, отсутствующие в фрагменте кода? – InBetween

ответ

2

Прежде всего, ваш код не является полным. Я предполагаю, что то, что отсутствует в вашем фрагменте, - это просто две закрывающие фигурные скобки.

Имея это в виду, позволяет реорганизовать код так, этот беспорядок МФС и ELSES немного легче понять.

Прежде всего, почему вы проверяете s1 и s2 дважды? Вы можете проверить один раз, а затем проверить s3.

Кроме того, вы хотите использовать инструкцию switch при ветвлении на многочисленные постоянные значения. Это более читаемо и устраняет необходимость в бесконечных и уродливых заказах как ваш ran чек.

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 

Хорошо, теперь, когда мы это написано, как это, его немного легче рассуждать о каких случаях вы обработки и которые один вы не являетесь.

Вы только случаи, когда обработка s1 и s2 равны нулю и s3 равняется либо 1 или 2. Это оно. Любое другое значение s1, s2 или s3 просто проигнорирует весь ваш код, потому что он не найдет подходящую статью if или else. Это то, чего вы действительно хотите?

0

запустил отладчик, и он отлично работает, теперь не имеет понятия, почему он не работал раньше и что делает или делает отладчик. спасибо за ваше время за помощь. (не имел понятия, что отладчик только использовал программу в течение нескольких недель, делая игру, (nim))