2017-01-22 2 views
0

Ich habe Probleme mit dem oder Operator und Zufallsgenerator. Ich möchte, dass der Zufallszahlengenerator eine Zahl zwischen 1 und h zieht, wenn er von einem Benutzer gewählt und als 1,6,11 und 16 gespeichert wurde. Dann möchte ich, dass die if-Anweisung die Zufallszahl betrachtet und entscheidet, ob dies der Fall ist um zu tun, was ich programmiert habe oder gehen und die else-Anweisung ausführen. Im Moment scheint es nur die if-Anweisung auszuführen und niemals die else (die zweite sonst, die erste funktioniert gut). Der Code, den ich habe, istOder Operator/Zufallszahl

 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; } 

und ich bin mit C# 2015

+0

hast du versucht, 'ran' auf 6 zu stellen (oder irgendeinen anderen Wert, der es in den 'else' verschiebt Aussage) noch? – WQYeo

+0

Ihr Problem ist ein bisschen schwer zu verstehen. Könnten Sie bitte klar angeben, ob das immer wahr ist? Und haben Sie versucht, es im Debugger zu starten, um zu überprüfen, welche Art von Werten Sie erhalten und ob sie dem entsprechen, was Sie erwarten. –

+0

fehlt dort ein bisschen Code. Hat das 'if' innerhalb des ersten 'else' eine 'else'-Klausel? Oder gibt es einfach zu schließende geschweifte Klammern, die in deinem Code-Snippet fehlen? – InBetween

Antwort

2

Zunächst einmal Ihr Code nicht vollständig ist. Ich nehme an, dass das, was in Ihrem Schnipsel fehlt, einfach zwei schließende geschweifte Klammern sind.

Mit dem im Verstand, können Sie Ihren Code so das Durcheinander von ifs und elses ein wenig leichter zu verstehen, Refactoring.

Zuerst, warum überprüfen Sie s1 und s2 zweimal? Sie können einmal prüfen und dann s3 überprüfen.

Sie möchten auch die switch-Anweisung verwenden, wenn Sie auf zahlreiche konstante Werte verzweigen. Es ist lesbarer und es beseitigt die Notwendigkeit von unendlich und hässlich orings wie Ihre ran überprüfen.

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, jetzt, da wir es so geschrieben haben, ist es ein wenig einfacher, über welche Fälle zur Vernunft Sie sind Handling und welche Sie sind es nicht.

Sie sind Handling nur Fälle, in denen s1 und s2 gleich Null sind und s3 gleich entweder 1 oder 2. Das ist es. Jeder andere Wert von s1, s2 oder s3 ignoriert einfach Ihren gesamten Code, weil er keine passende if oder else Klausel findet. Willst du das wirklich?

0

lief der Debugger und es funktioniert gut haben keine Ahnung, warum es vorher nicht funktionierte und was der Debugger tut oder tat. Danke für deine Zeit, mir zu helfen. (hatte keine Ahnung, dass ein Debugger das Programm nur für ein paar Wochen benutzt hat, (nim))

Verwandte Themen