我正在尝试将一个文本文件读入我的数组,但是它将在输出末尾加0,直到数组的大小为止。我认为问题出在我阅读文本文件的方式上。
我使用了一个foreach循环来显示数组,但是它做同样的事情。
static void Main(string[] args)
{
int size = 10000;
int[] Array = new int[size];
StreamReader SR = new StreamReader("Data.Txt");
int i = 0;
while (!SR.EndOfStream)
{
Array[i] = int.Parse(SR.ReadLine());
i++;
}
Console.WriteLine("ARRAY BEFORE SORTING" );
for (int x = 0; x <= Array.Length-1 ; x++)
{
Console.WriteLine(Array[x]);
}
Console.ReadLine();
}
代码在文本文件中输出常规数字,但之后又添加了不必要的900 0
答案 0 :(得分:2)
以下是执行此操作的简单方法。 (实现这一目标的方法有很多。您可能会找到不同的答案。我发现您正在使用基本代码块。)
问题
static void Main(string[] args)
{
int size = 10000;
int[] Array = new int[size];
您正在创建一个数组,其中10000个项目分配了0(默认值)。因此,那些未从文本文件中分配值的项目将永远保持0。
解决方案
根据文本文件中的值数创建数组。
string[] lines = File.ReadAllLines(YOUR_FILE PATH);
int[] array = new int[lines.Length];
int i =0;
foreach(var line in lines)
{
array[i] = int.Parse(line);
i++;
}
答案 1 :(得分:0)
您不知道size
,对吗?
static void Main(string[] args)
{
// File is non necessary has exactly 10000 items it can have, say, 100 ones
int size = 10000;
int[] Array = new int[size];
创建数组时-int[] Array = new int[size];
-您已经掌握了-10000
个项目,每个项目0
;然后
当最后一个9100
仍为900
时,您重写其中的第一个0
。
获取正确数组的简便方法是 Linq :
using System.Linq;
...
static void Main(string[] args)
{
int[] Array = File
.ReadLines("Data.Txt")
.Select(item => int.Parse(item))
.ToArray();
Console.WriteLine("ARRAY BEFORE SORTING");
...
如果要修改当前代码,请使用List<int>
而不是数组来收集项目:
static void Main(string[] args)
{
int size = 10000;
List<int> items = new List<int>();
// using: Do not forget to close the file (via IDisposable)
using (StreamReader SR = new StreamReader("Data.Txt"))
{
while (!SR.EndOfStream)
{
items.Add(int.Parse(SR.ReadLine()));
}
}
// Now either int[] Array = items.ToArray(); or
int[] Array = new int[items.Count]; // <- no necessary 10000
for (int i = 0; i < Array.Length; ++i)
Array[i] = items[i];
Console.WriteLine("ARRAY BEFORE SORTING");
...
答案 2 :(得分:0)
在c#
中创建任何变量时,它将被初始化为预定义的默认值。
在您的情况下,会将int []分配给{0,0,0,0 .....},这意味着您有一个包含10000个零的数组,但是您将数字设置为某个数字(小于10000),那么您将得到{1,2,3,0,0,0,...}。
如果您之前知道数组长度,则可以更改大小。
或者您是一个List<int>
,它是一个动态数组,您可以阅读关于它的所有内容here
这是一个示例用法
List<int> Array = new List<int>(); // must be intalized otherwise you will get null exception
using (StreamReader SR = new StreamReader("Data.Txt")) //to prevent memorey leaks
{
while (!SR.EndOfStream)
{
Array.Add(int.Parse(SR.ReadLine()));
}
}
Console.WriteLine("ARRAY BEFORE SORTING");
for (int x = 0; x <= Array.Count - 1; x++)
{
Console.WriteLine(Array[x]);
}
Console.ReadLine();
答案 3 :(得分:0)
这仅仅是因为您创建了一个大小为'10000'的数组,即使它们为空,foreach也会在数组中的10000个空元素上循环。 如果知道元素的长度,请使用此元素创建数组。否则使用列表。
static void Main(string[] args)
{
List<int> array = new List<int>();
StreamReader SR = new StreamReader("Data.Txt");
while (!SR.EndOfStream)
{
array.Add(int.Parse(SR.ReadLine()));
}
Console.WriteLine("ARRAY BEFORE SORTING" );
for (int x = 0; x < array.Count; x++)
{
Console.WriteLine(array[x]);
}
Console.ReadLine();
}
答案 4 :(得分:0)
您可以改为使用可为空的int
数组。这样,默认值为null
,并且文本中不会附加任何0。
int size = 10000;
int?[] Array = new int?[size];