2015-04-28 2 views
0

Моя проблема теперь с моей программой в том, что она не отображает значения в файле данных должным образом. Он показывает все 0 в отсортированном виде. Он не ретранслирует фактические числа по возрастанию.Создание консольного приложения для чтения и отображения номеров из файла

====================================

25 цифры, которые должны быть считываются и помещены в массив, являются: (используется только 4 номера, чтобы сохранить сообщение короче

10.5 
20.1 
33.0 
45.9 

================. ==========================

My код ниже: Я думаю, что моя проблема в моем методе DisplayArray(). Он выписывает все 0, как это:

\Users\Joe\Documents\Visual Studio 2013\Projects\CIS110\Program11\prog11Dat. 
was opened 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
0 0 Press any key to continue . . . 

=======

class Program11 
    { 
     const string INPUT_FILE_NAME = "\\Users\\Joe\\Documents\\Visual Studio 2013\\Projects\\CIS110\\Program11\\prog11Dat.Txt"; 

     static double[] numArray = new double[25]; 
     static StreamReader fileIn; 

     static void ReadFile() 
     { 
      if (File.Exists(INPUT_FILE_NAME)) 
      { 
       fileIn = (File.OpenText(INPUT_FILE_NAME)); 
       Console.WriteLine("{0} was opened",INPUT_FILE_NAME); 
      } 
      else 
      { 
       Console.WriteLine("Error: {0} does not exist\n",INPUT_FILE_NAME); 
       ConsoleApp.Exit(); 
      }    
     } 


     static void DisplayArray() 
     { 

      for (int i = 0; i < numArray.Length; i++) 
       Console.Write("{0} ", numArray[i]); 


     } 

     static void SortValuesAscending() 
     { 
      uint i, j, k; 
      double tempValue; 

      for (i=1; i<=(numArray.Length); i++) 
      { 
       k = 1; 
       for (j = (i + 1); j <= numArray.Length -1; j++) 
        if (numArray[j] < numArray[k]) 
         k = j; 
       if (k>i) 
       { 
        tempValue = numArray[k]; 
        numArray[k] = numArray[i]; 
        numArray[i] = tempValue; 
       } 
      } 
     } 

     static void Main(string[] args) 
     { 

      ReadFile(); 
      DisplayArray(); 
      SortValuesAscending(); 
      DisplayArray(); 


     } 

    } 
} 
+0

Какова ваша * точная проблема, с которой вам нужна помощь? на минуту ваш вопрос слишком широк. – Sayse

+0

@Sayse - Извиняюсь, просто хотел дать как можно больше информации. У меня есть две проблемы, с которыми мне нужна помощь. Один из них вызывает методы: В Main() вызов ReadFile() для загрузки numArray. Затем вызовите DisplayArray(), чтобы отобразить содержимое numArray. Затем вызовите SortValuesAscending() для сортировки numArray. Наконец, снова вызовите DisplayArray(), чтобы отобразить numArray. Так что, я думаю, я мог бы начать с этого, чтобы сузить мою проблему. –

+1

Ваш основной метод уже вызывает 3 из этих 4 методов, вам просто нужно снова вызвать 'DisplayArray'.Гораздо лучше (большую часть времени) попытаться сделать ваш вопрос максимально лаконичным, не оставляя важных деталей, поэтому при чтении очень легко увидеть, где проблема – Sayse

ответ

0

Его получение там, ваша проблема в том, что ваш ReadFile не читает ни минуты; и не добавлять в массив двойников

static void ReadFile() 
{ 

    List<string> lines = new List<string>(); 
    if (File.Exists(INPUT_FILE_NAME)) 
    { 
     using(var sr = new StreamReader(INPUT_FILE_NAME)) 
     { 
      string line; 
      while((line = sr.ReadLine()) != null) 
      { 
       lines.Add(line); 
      } 
     } 
    } 
    else 
    { 
     Console.WriteLine("Error: {0} does not exist\n",INPUT_FILE_NAME); 
     ConsoleApp.Exit(); 
    } 

    // you now have a list of numbers as strings here (lines) 
    // You need to parse and assign these to your numArray 
    // Hint: for loop and Parse/TryParse 
} 

Я намеренно оставил, как сделать синтаксический анализ, чтобы помочь с вашим обучением :)

А вторым намеком, на вашем DisplayArray, посмотреть в использовании PadRight

1

Вы слепо читать строки в файле в массив фиксированной длины 25. Использование списка или инициализируйте свой массив на основе количества строк. Также вы не проверяете пустые строки. Если в конце файла у вас есть паразитный CRLF, File.Read успешно прочитает одну пустую строку.

Также 'J = (я + 1) ... Numarray [у] будет превышать массив, когда я == numArray.Length - 1.

1

Это метод одна линия, которая будет принимать файл имя, читать цифры (по одному в каждой строке), и распечатать их в отсортированном порядке:

public void PrintNumbersInFile(string fileName) 
    { 
     File.ReadAllLines(fileName) // reads the lines in the file into a string[] 
      .Select(l => double.Parse(l.Trim())) // for each item in the string[], parse the string into a double after trimming any spaces around it 
      .OrderBy(n => n) // sort by the value of the double 
      .ToList() // put the sorted values in a list 
      .ForEach(n => Console.Write("{0:F1} ", n)); // and for each item in the list, write out its value ({0:F1} to show one decimal point) 
    } 

Обратите внимание, что это предполагает, что файл существует и находится в допустимом формате, так что он будет бросать иначе ...

И используя образец ввода, который у вас был в ваших вопросах (помещая его в файл), это вывод:

10.5 20.1 33.0 45.9 Press any key to continue . . . 
Смежные вопросы