2015-10-25 80 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); 
    }