创建控制台应用程序以从文件中读取和显示数字
Creating Console App to Read and Display Numbers from a File
我的程序现在的问题是它没有正确显示数据文件中的值。它以排序的方式显示全 0。它没有以递增的方式传递实际数字。
====================================
需要读入并放在数组中的25个数字是:(只用了4个数字以保持post更短。
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();
}
}
}
您正在盲目地将文件中的行读取到一个固定长度的 25 数组中。使用列表或根据行数初始化您的数组。你也没有检查空行。如果文件末尾有一个杂散的 CRLF,那么 File.Read 将成功读取一个空行。
另外 'j = (i + 1) ... numArray[j]' 当 i == numArray.Length - 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 . . .
它到达那里,你的问题是你的 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
我的程序现在的问题是它没有正确显示数据文件中的值。它以排序的方式显示全 0。它没有以递增的方式传递实际数字。
====================================
需要读入并放在数组中的25个数字是:(只用了4个数字以保持post更短。
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();
}
}
}
您正在盲目地将文件中的行读取到一个固定长度的 25 数组中。使用列表或根据行数初始化您的数组。你也没有检查空行。如果文件末尾有一个杂散的 CRLF,那么 File.Read 将成功读取一个空行。
另外 'j = (i + 1) ... numArray[j]' 当 i == numArray.Length - 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 . . .
它到达那里,你的问题是你的 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