2017-02-24 3 views
1

Ich bin ziemlich neu in C# und versuche, Text Basis-Mastermind zu machen, aber wenn ich versuche zu überprüfen, ob die Benutzer antworten, ist das gleiche wie 3 der Zahlen i Erhalte diesen Fehler. „Operator‚||‘kann nicht auf Operanden vom Typ‚Bool‘und‚int‘angewandt werden“Operator "||" kann nicht auf Operanden vom Typ 'bool' und 'int' angewendet werden

 Random rnd = new Random(); 

     int pos1 = rnd.Next(1, 6); //generates random numbers 
     int pos2 = rnd.Next(1, 6); 
     int pos3 = rnd.Next(1, 6); 
     int pos4 = rnd.Next(1, 6); 

     int answer1 = Convert.ToInt32(Console.ReadLine()); 

     if (asnwer1 == pos1)   //checks if answer is the same as pos1 
     { 
      Console.WriteLine("Right"); 
     } 
     else if (answer1 == pos2 || pos3 || pos4) 
     { 
      Console.WriteLine("Wrong"); 
     } 
     else { 
      Console.WriteLine("Nope"); 
+3

Sie können 'x == i || nicht übersetzen x == j || x == k' in 'x == i || j || k, auch wenn es so liest wie du kannst. – juharr

Antwort

5

Alle Bedingungen bool Ergebnis zurückgeben sollten. pos3 und pos4 sind int - Sie sollten mit answer1 vergleichen.

Sie sollten neu schreiben Ihre else if:

else if (answer1 == pos2 || answer1 == pos3 || answer1 == pos4) 
+1

Oh. Danke, dass funktioniert :) –

+0

@KasparTvedtMoberg, Sie sind willkommen –

0

Do

else if (answer1 == pos2 || answer1 == pos3 || answer1 == pos4) 

Im Idealfall sollten Sie Ihren Code

Console.WriteLine(answer1 == pos1 ? "Correct": "Incorrect"); 
1
if (new[] {pos2,pos3,pos4}.Contains(answer1)) 
0

Logische Operatoren wie || requi sein res von Ihnen zu haben bool ean Wert auf beiden Seiten left || right. In Ihrem Beispiel haben Sie den ersten Operanden vom Typ bool und die nächsten sind int. Was macht keinen Sinn.

Um vergleichen zu können, ob Ihre Antwort diesen drei Werten entspricht, müssen Sie sie in einer zustandsähnlichen Anweisung (answer == posX) verwenden, wobei X die Nummer Ihrer Position ist.

Beispiel Arbeits Code von Ihnen:

else if (answer1 == pos2 || answer1 == pos3 || answer1 == pos4) 
// do some logic here ... 

diese mehr "generic" Weg in zu verlängern, hat jeder Operand einen bool ean Wert als solche präsentieren:

if (true || false || ...) 

Aber da es wäre nicht hilfreich, um rohe bool ean Wert in diese wie zum Beispiel zu verpacken:

bool a = answer1 == pos2; 
bool b = answer1 == pos3; 
if (a || b ...) 

Sie können tatsächlich Bedingungen wie die schreiben Sie versucht haben:

if (operandL == operandR || operandL != operandR || ...) 
0

Ich gehe davon aus, dass durch

else if (answer1 == pos2 || pos3 || pos4) 

Sie bedeutete "answer1 gleich pos2, pos3 oder pos4".

Dies ist jedoch nicht die richtige Syntax dafür. Wie die Fehlermeldung besagt, erwartet es alles innerhalb || einen booleschen Ausdruck zu sein, und pos3 und pos4 sind definitiv nicht Boolean.

Sie könnten eine Erweiterungsmethode wie folgt schreiben:

public static class Extensions 
{ 
    public static bool In<T>(this T item, params T[] args) 
    { 
     foreach (T arg in args) 
     { 
      if (arg.Equals(item)) 
       return true; 
     } 

     return false; 
    } 
} 

Oder, einfacher gesagt:

public static class Extensions 
{ 
    public static bool In<T>(this T item, params T[] args) 
    { 
     return args.Contains(item); 
    } 
} 

Sie dann answer1.In(pos2, pos3, pos4) schreiben konnte.

+1

Vielen Dank! Sehr hilfreich! –

Verwandte Themen