2016-07-15 1 views
0

Ich versuche, eine Times-Table-Konsolenanwendung in der Visual Studio 2015-Community mit Visual C# zu erstellen, aber die if-Anweisung wird nicht ordnungsgemäß ausgewertet. Ich begann zu debuggen (testen) meine Konsolenanwendung, aber die if-Anweisung wurde in den letzten drei Fragen nicht ordnungsgemäß ausgewertet. Kann jemand helfen? Hier ist mein Code:Warum wird die if-Anweisung in Visual C# nicht ordnungsgemäß ausgewertet?

using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Text; 
    using System.Threading.Tasks; 

    namespace xTables 
    { 
     class Program 
     { 
      static void Main(string[] args) 
      { 
        Console.WriteLine("Welcome to xTables"); 
     Console.WriteLine("In this application, you'll have to answer questions from"); 
     Console.WriteLine("the times table up to 12"); 
     Console.WriteLine("Good Luck!"); 
     //Question 1 
     Console.WriteLine("What is 1 x 6"); 
     string userAnswer = Console.ReadLine(); 


     if (userAnswer == "6") 
     { 
      string message = "Correct"; 
      Console.WriteLine(message); 
     } 

     else 
     { 
      string message = "Incorrect"; 
      Console.WriteLine(message); 
     } 



     //Question 2 
     Console.WriteLine("What is 2 x 3"); 
     Console.ReadLine(); 

     if (userAnswer == "6") 
     { 
      string message = "Correct"; 
      Console.WriteLine(message); 
     } 

     else 
     { 
      string message = "Incorrect"; 
      Console.WriteLine(message); 
     } 



     //Question 3 
     Console.WriteLine("What is 8 x 9"); 
     Console.ReadLine(); 

     if (userAnswer == "72") 
     { 
      string message = "Correct"; 
      Console.WriteLine(message); 
     } 

     else 
     { 
      string message = "Incorrect"; 
      Console.WriteLine(message); 
     } 


     //Question 4 
     Console.WriteLine("What is 5 x 6"); 
     Console.ReadLine(); 

     if (userAnswer == "30") 
     { 
      string message = "Correct"; 
      Console.WriteLine(message); 
     } 

     else 
     { 
      string message = "Incorrect"; 
      Console.WriteLine(message); 
     } 

     //Question 5 
     Console.WriteLine("What is 4 x 6"); 
     Console.ReadLine(); 

     if (userAnswer == "24") 
     { 
      string message = "Correct"; 
      Console.WriteLine(message); 
     } 

     else 
     { 
      string message = "Incorrect"; 
      Console.WriteLine(message); 
     } 


    } 
} 

}

Antwort

1

In den letzten drei, die Sie tun müssen:

userAnswer = Console.ReadLine(); 

Statt nur Console.ReadLine();

+0

Visual Studio sagt, dass 'userAnswer' bereits in diesem Bereich definiert wurde –

+0

@AdrianSimon Haben Sie zufällig "string userAnswer = Console.ReadLine()" statt nur "userAnswer = Console.ReadLine()"? Der erste würde versuchen, die Variable neu zu definieren, was zu dem Fehler führen würde, von dem Sie sprechen. –

3

In allen aber die erste Frage, haben Sie dies:

Console.ReadLine(); 

Wenn Sie wollen wahrscheinlich diese:

userAnswer = Console.ReadLine(); 

EDIT für weitere Erläuterungen

Da die Antwort auf die zweite Frage ist die gleiche wie die Antwort auf die erste, es scheint zu funktionieren. (Sie geben vielleicht dieselbe Antwort zweimal ein.) Aber in Wirklichkeit sind es nicht nur die letzten drei Fragen, die nicht funktionieren; nur die erste Frage macht tatsächlich, was du willst.

-1

Ich denke, Sie folgende verwenden sollten:

if (userAnswer.Equals(6)){ 
// Rest of the code 

} 
+0

Dies vergleicht einen Referenztyp ('string') mit einem Werttyp (' int') und gibt immer 'false' zurück. Sie müssen entweder den 'int' in einen' string' konvertieren, oder umgekehrt. – Cameron

0

neben den oben genannten Antworten, die Sie wirklich brauchen nicht die Abstraktion Methode für die Nachrichtenvariable zu verwenden.

Console.WriteLine("Correct") 

würde

0

Sie den Rückgabewert von Console.ReadLine() verwenden muß, um genauso gut funktionieren.

userAnswer = Console.ReadLine(); 

Als Randbemerkung, dann ist dies ein ausgezeichneter Kandidat für eine Methode:

HandleQuestion(1, 6); 
HandleQuestion(2, 3); 
HandleQuestion(8, 9); 
HandleQuestion(5, 6); 
HandleQuestion(4, 6); 

void HandleQuestion(int operand1, int operand2) 
{ 
    Console.WriteLine("What is {0} x {1}", operand1, operand2); 
    string userAnswer = Console.ReadLine(); 

    if (userAnswer == (operand1 * operand2).ToString()) 
     Console.WriteLine("Correct"); 
    else 
     Console.WriteLine("Incorrect"); 

}

Sobald Sie das getan haben, können Sie in Erzeugen von Fragen mit zufälligen Werten bewegen für die Operanden.

0

Sie geben die readline() nicht in eine Variable zurück. Erraten, was Sie tun möchten: userAnswer = Console.ReadLine();

Verwandte Themen