我的程序现在的问题是它没有正确显示数据文件中的值。它以排序的方式显示所有0。它并没有以递增的方式传递实际数字。
====================================
需要读入并放入数组的25个数字是:(仅使用4个数字来缩短帖子。
10.5
20.1
33.0
45.9
=================================
到目前为止,我的代码如下:我认为我的问题出在我的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 :(得分: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 . . .
答案 1 :(得分:0)
您正在盲目地将文件中的行读取为25的固定长度数组。使用列表或根据行数初始化数组。你也没有检查空行。如果文件末尾有一个迷路CRLF,那么File.Read将成功读取一个空行。
另外&#39; j =(i + 1)... numArray [j]&#39;当i == numArray.Length - 1时,它将超过数组。
答案 2 :(得分: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