gpt4 book ai didi

c# - 在 C# 中识别索引越界

转载 作者:太空宇宙 更新时间:2023-11-03 11:05:49 25 4
gpt4 key购买 nike

所以我有这段代码可以从 txt 中对虚构的人口普查数据进行排序。文件:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

class Program
{
const int SIZE = 900;
const int SIZEDISTRICT = 22;
const int RANGE = 5;
static void Main()
{
//These arrays will hold the split data from a text file.
int[] districtDataD = new int[900];
string[] districtDataG = new string[900];
string[] districtDataM = new string[900];
int[] districtDataA = new int[900];

//countDistrict will hold how many hypothetical people in each hypothetical district and
//ages will hold how many hypothetical people between certain hypothetical ages.
int[] countDistrict = new int[SIZEDISTRICT];
int[] ages = new int[RANGE] { 0, 18, 30, 45, 65};


//Modules
ReadFile(districtDataD, districtDataG, districtDataM,districtDataA);
CountPopulation(districtDataD, countDistrict);
AgeRanges(districtDataA, ages);
DisplayData(districtDataD, districtDataA, ages);
}//End Main


//This module splits and inserts the data into the four first arrays
static void ReadFile(int[] districtDataD, string[] districtDataG, string[] districtDataM, int[] districtDataA)
{
string[] lines = File.ReadAllLines("census.txt");
int i = 0;

while (i < SIZE && i < districtDataD.Length)
{
foreach (string line in File.ReadAllLines("census.txt"))
{
string[] parts = line.Split(',');

districtDataD[i] = int.Parse(parts[0]);
districtDataG[i] = parts[1];
districtDataM[i] = parts[2];
districtDataA[i] = int.Parse(parts[3]);
i++;
}
}
}
//This module counts how many hypothetical people are in each fictional district
static void CountPopulation(int[] districtDataD, int[] countDistrict)
{
int i = 0;
for (i = 0; i < districtDataD.Length; i++)
{
if (districtDataD[i] > 0 && districtDataD[i] < districtDataD.Length)
{
countDistrict[districtDataD[i]]
++;
}
}
}


//This module sorts the ages into 0-18, 19-30, 31-45, 46-65, and 65 and up
private static void AgeRanges(int[] districtDataA, int[] ages)
{
int idx = 0;
for (idx = 0; idx < districtDataA.Length && ages[idx] > districtDataA[idx]; idx++)
{

ages[idx] = districtDataA[idx];
}
}


//This module displays the data
static void DisplayData(int[] countDistrict, int[] ageDistrict, int[] ages)
{
int index = 0;
for (index = 0; index < countDistrict.Length; index++)
{
Console.WriteLine(" District {0}: {1}", index + 1, countDistrict[index]);
}

int x = 0;
for (x = 0; x < ageDistrict.Length; x++)
{
Console.WriteLine("Ages under {0} : {1}", ages[x], ageDistrict[x]);
}
}
}

我得到索引越界错误,但我不知道在哪里以及如何找到它。

文本。文件目前看起来像这样,但会扩展到包括更多,大约 100 个左右。 900只是作为上限。

21,f,s,14

41,f,m,22

12, 米, 秒, 12

11, f, s, 8

29, 米, 米, 4

6、米、秒、12

9, f, s, 2

30, f, s, 1

最佳答案

如果您不知道数组的长度,请改用集合。这将使您的文件大小与长度无关。使用数组,您必须设置数组的长度,据我所知,它可以根据文件而改变 - 如果没有正确实现,这将始终给您带来索引越界的困难。使用集合可以避免这些问题

List<int> districtDataD = new List<int>();

然后您可以将项目添加到此集合中,例如:

districtDataD.Add(1);

关于c# - 在 C# 中识别索引越界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15872768/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com