2016-05-11 16 views
-1

Ich habe ein paar Probleme mit dem Code unten. Ich lerne immer noch und ich weiß nicht, wie ich es beheben soll.Wie speichert man eine Variable mit einer Methode in C#?

1. Was ich versuche, ist eine Methode (GetInt) zu erstellen, um Variablen zu speichern, wie ich es in der zweiten Methode (GetTrack) versuche, die in meine Hauptmethode eingeht.

2.-I kann nicht die getint Methode Schleife erhalten, wenn eine ungültige Eingabe Theres, vermute ich mit

Danke

//Get int Method 
static public void GetInt(string sPrompt, int iMin, int iMax) 
{ 
    int iNum; 
    bool bError = false; 

    do 
    { 
     bError = true; 
     try 
     { 
      Console.Write(sPrompt); 
      iNum = int.Parse(Console.ReadLine()); 
      if ((iNum < iMin) || (iNum > iMax)) 
      { 
       Console.WriteLine("The value is out of range."); 
       bError = true; 
      } 
     } 
     catch (ArgumentException) 
     { 
      Console.WriteLine("An invalid number was entered, please try again."); 
      bError = true; 
     } 
    } 
    while (bError == false); 
} 

//Get Track Method 
static public void GetTrack() 
{ 
    int iMin; 
    int iSec; 

    iMin = GetInt("Enter the minutes: ", 0, 10); 
    iSec = GetInt("Enter the seconds: ", 0, 59); 
} 
+0

tun, eine schnelle Google-Suche auf 'void' und welche Leere Methoden tun .. in Bezug auf 'return values' – MethodMan

+0

Es könnte etwas besser sein, dass Ihr' try' nur 'iNum = int.Parse (Console.ReadLine());} umschließt,' damit Sie andere Ausnahmen nicht fangen (und ignorieren). Wenn zum Beispiel 'sPrompt' 'null' ist, dann wird 'Console.Write' eine Ausnahme auslösen, aber Ihr Programm wird diese Ausnahme einfach abfangen und" ungültige Nummer, versuchen Sie es erneut "sagen, obwohl die Nummer gültig ist, es ist' sPrompt' das ist ungültig. – Quantic

Antwort

6
THINGY try/catch und boolean etwas falsch gibt es

Unmittelbar am Anfang von GetInt setzen Sie bError auf True. Dies sollte höchstwahrscheinlich falsch sein, so dass Sie tatsächlich eine Schleife machen würden, da Sie sie nirgendwohin auf false setzen.

Sie geben auch nichts von der Methode zurück, so dass Sie nichts zurückbekommen. Sie müssen die Methode ändern, um int zurückzugeben und den Wert tatsächlich zurückzugeben, wenn Sie es erhalten. von Anfang an Ihrer do ... while-Schleife

//Get int Method 
static public int GetInt(string sPrompt, int iMin, int iMax) 

Entfernen Sie die bError = true; Anweisung:

+0

Ich habe das auch gesehen! –

0

Die Angabe von GetInt Methode sollte wie folgt geändert werden. Nach der do ... while-Schleife, fügen Sie die folgende Anweisung:

return iNum; 

Auch Ihr while Zustand sollte bError == false-bError == true oder einfach zu bError, was bedeutet, die gleiche Sache, wenn Ihre Absicht geändert werden soll den Benutzer solange auffordern, bis die Eingabe akzeptabel ist.

0

Hier ist, wie ich "get" Benutzereingabe von der Konsole:

  string choice = string.Empty; 
      bool goodChoice = false; 

      while (!goodChoice) 
      { 
       Console.Clear(); 
       Console.WriteLine(string.Empty); 
       Console.WriteLine("Do you really want to hurt me?"); 
       Console.WriteLine(string.Empty); 
       Console.WriteLine(string.Empty); 
       Console.WriteLine("Please Y or N (or 0 to exit)"); 
       choice = Console.ReadLine().Trim(); 

       if (choice.Equals("Y", StringComparison.OrdinalIgnoreCase)) 
       { 
        goodChoice = true; 
       } 

       if (choice.Equals("N", StringComparison.OrdinalIgnoreCase)) 
       { 
        goodChoice = true; 
       } 

       if (choice.Equals("0")) 
       { 
        goodChoice = true; 
        return; /* exist the routine */ 
       } 
      } 

für Ihren Fall Modified

  string choice = string.Empty; 
      bool goodChoice = false; 

      while (!goodChoice) 
      { 
       Console.Clear(); 
       Console.WriteLine(string.Empty); 
       Console.WriteLine("Enter an Integer between {0} and {1}", minValue, maxValue); 
       Console.WriteLine(string.Empty); 
       Console.WriteLine(string.Empty); 
       Console.WriteLine("Please enter an integer (or X to exit)"); 
       choice = Console.ReadLine().Trim(); 

       int intParseResult = 0; 
       bool intParseAttempt = int.TryParse(choice, out intParseResult); 
       if(!intParseAttempt) 
       { 
        goodChoice = false; 
       } 
       else 
       { 
         if ((intParseResult < minValue) || (intParseResult > maxValue)) 
         { 
             Console.WriteLine("Out of Range"); 
         } 
         else 
         { 
          goodChoice = true; 
         } 
       } 

       if (choice.Equals("X")) 
       { 
        goodChoice = true; 
        return -99999; /* you'll have to figure out how to handle exits on your own */ 
       } 
      } 
+0

PS, bitte die ungarische Notation fallen lassen. Es ging mit der Macarena aus. (Beispiel: iNum, iMax) – granadaCoder