2015-10-25 139 views
0

我有一個改變char數組值的小程序。但首先你需要告訴程序哪個數組你想改變一個值;並將新值及其位置寫入該相同陣列位置。程序跳過代碼行

但是,當我輸入數組編號時,程序將跳過允許輸入新值及其位置的代碼行。然後程序在最後拋出一個FormatException

下面的代碼:

static void addLetters(char[] messageOne, char[] messageTwo) 
    { 
     char Mnumber; 
     char letter; 
     string pos; 
     int position; 

     Console.Write("- Message #: "); 
     Mnumber = (char)Console.Read(); 

     if (Mnumber == '1') 
     { 
      Console.Write("Letter: "); 
      letter = (char)Console.Read(); 

      Console.Write("\nPosition: "); 
      pos = Console.ReadLine(); 
      position = Int32.Parse(pos); 

      messageOne[position - 1] = letter; 
     } 

     if (Mnumber == '2') 
     { 
      Console.Write("Letter: "); 
      letter = (char)Console.Read(); 

      Console.Write("\nPosition: "); 
      pos = Console.ReadLine(); 
      position = Int32.Parse(pos); 

      messageTwo[position - 1] = letter; 
     } 
    } 


    static void Main(string[] args) 
    { 
     char[] array1 = new char[50]; 
     char[] array2 = new char[50]; 

     for (int i = 0; i < 50; i++) 
     { 
      array1[i] = '*'; 
      array2[i] = '*'; 
     } 

     addLetters(array1, array2); 
    } 
} 

附:你能告訴我如何讓這段代碼更「優雅」嗎?

+0

告訴我們這行給了一個錯誤。 – Rob

+0

'position = Int32.Parse(pos);'line給出錯誤 – Alex

+0

您可能想使用'TryParse'而不是'Parse'。 – jhmt

回答

0

閱讀單個字符時,建議使用Console.ReadKey()。KeyChar。我修改代碼來處理異常,以及:

static void addLetters(char[] messageOne, char[] messageTwo) 
    { 
     char Mnumber; 
     char letter; 
     string pos; 
     int position; 

     try 
     { 
      do 
      { 
       Console.Write("- Message #: "); 
       Mnumber = Console.ReadKey().KeyChar; 
       Console.WriteLine(); 
      } 
      while (Mnumber != '1' && Mnumber != '2'); 

      Console.Write("\nLetter: "); 
      letter = Console.ReadKey().KeyChar; 

      Console.Write("\nPosition: "); 
      pos = Console.ReadLine(); 
      position = Int32.Parse(pos); 

      if (Mnumber == '1') 
       messageOne[position - 1] = letter; 
      else 
       messageTwo[position - 1] = letter; 
     } 
     catch (FormatException) 
     { 
      Console.WriteLine("Invalid input format, position must be an integer"); 
     } 
     catch (IndexOutOfRangeException) 
     { 
      Console.WriteLine("Position out of array bounds"); 
     } 
     finally 
     { 
      Console.Read(); 
     } 

    } 
+0

謝謝!幫助了我很多 – Alex

0

嘗試單一的功能這兩個消息,並TryParse()你的字符串到整數轉換

static char ReadChar(string prompt) 
    { 
     // Screen Prompt 
     Console.Write(prompt); 
     // Read a Character 
     return Console.ReadKey(false).KeyChar; 
    } 
    static int ReadNumber(string prompt) 
    { 
     // Screen Prompt 
     Console.Write(prompt); 
     int result=-1; 
     // Reads a number and onverts it into an integer 
     int.TryParse(Console.ReadLine(), out result); 
     return result; 
    } 

    // Caution, this modifies the contents of `messages` 
    static void addLetters(params char[][] messages) 
    { 
     // Read message index (first=1, second=2, etc) 
     int Mnumber=ReadNumber("- Message #: "); 
     // Read letter 
     char letter=ReadChar("Letter: "); 
     // Read placement position 
     int position=ReadNumber("\nPosition: "); 
     // Get the right message 
     char[] current_message=messages[Mnumber-1]; 
     // Assigns a letter to the message 
     current_message[position]=letter; 
    } 
    static void Main(string[] args) 
    { 
     int n=50; //Store the size instead of hard coding it all over your code 
     char[] array1=new char[n]; 
     char[] array2=new char[n]; 

     for (int i=0; i<n; i++) 
     { 
      array1[i]='*'; 
      array2[i]='*'; 
     } 

     addLetters(array1, array2); 
    }