我试图将100个随机数写入一个文件,然后将文件读取到一个数组中,然后对数组进行排序,然后将其写出。如果我将数组长度设置为101,那么如果它更高,代码就会工作——它不工作,只输出0。似乎出于某种原因,如果数组长度高于实际数组长度,则隐函数只输出0。
using System;
using System.IO;
using System.Diagnostics;
using System.Linq;
using System.Text;
namespace Filesort
{
class Program
{
static void Main(string[] args)
{
Random rng = new Random();
int[] numbers = new int[1000];
using (FileStream fs = new FileStream(@"C:/c#/sitekjekokot.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
using (StreamWriter sw = new StreamWriter(fs))
{
for (int i = 0; i < 100; i++)
{
sw.WriteLine(rng.Next(1, 101));
}
sw.WriteLine("end");
}
}
int size = 0;
using (FileStream fs = new FileStream(@"C:/c#/sitekjekokot.txt", FileMode.Open, FileAccess.ReadWrite))
{
using (StreamReader sr = new StreamReader(fs))
{
string number = "sitek";
while(true)
{
number = sr.ReadLine();
if (number != "end")
{
break;
}
else
if (number == null)
{
Console.WriteLine("sitejekokot");
}
Console.Write(number);
numbers[size] = Convert.ToInt32(number);
size++;
Console.WriteLine(numbers[size]);
}
}
}
Array.Sort(numbers);
for (int z = 0; z < size; z++)
{
Console.WriteLine(numbers[z]);
}
}
}
}
您break
太早,在的第1行
using (StreamReader sr = new StreamReader(fs))
{
string number = "sitek";
while(true)
{
number = sr.ReadLine();
// On the very 1st line (which is random number, not "end")...
if (number != "end")
{
// ... you break, i.e. stop reading file
break;
}
...
我建议使用File
类而不是Stream
s和Linq进行查询。
创建100
随机数并将其写入文件:
Random rng = new Random();
File.WriteAllLines(@"C:/c#/sitekjekokot.txt", Enumerable
.Range(1, 100)
.Select(i => rng.Next(1, 101).ToString())
.Concat(new string[] {"end"}));
从文件中读取所有数字,直到"end"
标记,对项目进行排序并以数组形式出现:
int[] numbers = File
.ReadLines(@"C:/c#/sitekjekokot.txt")
.TakeWhile(line => line != "end")
.Select(line => int.Parse(line))
.OrderBy(number => number)
.ToArray();
记下所有numbers
:
foreach (var number in numbers)
Console.WriteLine(number);