2013-03-01 2 views
0

В настоящее время я пишу программу, которая принимает имя человека и 5 переменных. Тогда с этими 5 переменными мне поручено находить дисперсию avg/sample. Мой текущий код выглядит следующим образом:Строка ввода не была в правильном формате C#

using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Text; 
    using System.Threading.Tasks; 
    namespace ConsoleApplication1 
    { 
     class Program 
     { 
     static void Main(string[] args) 
     { 
      string userName = ""; 
      string variables = ""; 
      int[] vars = parseVariableString(variables); 
      vars = new int[5]; 
      int sum = 0; 

      Console.Write("Please enter your name: ", userName); 
      userName = Console.ReadLine(); 
      Console.ReadLine(); 
      Console.Write("Please enter 5 numbers with a space or coma inbetween: ", vars); 

      for (int i = 0; i < vars.Length; i++) 
      { 
       int number = vars[i]; 
       sum += number; 
      } 
      float avg = sum/(float)vars.Length; 
      float variance = 0; 
      for (int i = 0; i < vars.Length; i++) 
      { 
       int number = vars[i]; 
       float f = number - avg; 
       variance += (float)Math.Pow(f, 2); 
      } 
      float sv = variance/(vars.Length - 1); 

      Console.Write(" Your name is: ", userName); 
      Console.ReadLine(); 
      Console.Write("The average of your numbers is: ", avg); 
      Console.ReadLine(); 
      Console.Write("The sample variance of your numbers is: ", sv); 
      Console.ReadKey(); 
     } 

     private static int[] parseVariableString(String variables) 
     { 
      String[] varArray = variables.Split(' ', ','); 
      int[] intArray = new int[varArray.Length]; 

      for (int i = 0; i < varArray.Length; i++) 
      { 
       String variable = varArray[i]; 
       int integer = Convert.ToInt32(variable); 
       intArray[i] = integer; 
      } 
      return intArray; 
     } 
    } 
} 

Я получаю «Входная строка не была в правильном формате» ошибка в «Int целое число = Convert.ToInt32 (переменная);» Я не понимаю, почему именно я получаю эту ошибку. Я смотрел онлайн, что это значит, многие говорят, что используют int.parse, но из того, что я читал, вы получаете это, потому что переменная не распознает, что есть значение, связанное с ним. Любая помощь будет принята с благодарностью.

+2

Это означает, что это были не только цифры и что он не может преобразовать его в int. –

+0

Каково значение переменной, когда генерируется исключение? – vlad

+0

Лучше использовать метод TryParse, он вернет значение bool, указывающее, может ли строка быть проанализирована (преобразована в int32) или нет. –

ответ

5
string variables = ""; 
    int[] vars = parseVariableString(variables); 

Вы объявляете пустую строку, а затем пытаетесь преобразовать эту строку в int.

private static int[] parseVariableString(String variables) 
{ 
    String[] varArray = variables.Split(' ', ','); 
    int[] intArray = new int[varArray.Length]; 

    for (int i = 0; i < varArray.Length; i++) 
    { 
     String variable = varArray[i]; 
     int integer = Convert.ToInt32(variable); 
     intArray[i] = integer; 
    } 
    return intArray; 
} 

Как и когда вы проходите в пустой строке, вам нечего расколоть, и поэтому ваш массив пуст.

+0

Ах, ладно, это имеет смысл. Я не понимал, что это пусто. Поэтому я предполагаю, что текущий поток не прав. Я понял, что при запуске пользователю будет предложено указать свое имя и номера, которые затем заполнили массив. – jimjam456

+0

Рад, что я могу вам помочь. – MyCodeSucks

Смежные вопросы