指数数组的边界之外。如何解决这个问题呢? [重复]

问题描述 投票:0回答:2
using System;
using System.IO;

namespace _2._1
{
class Program
{
    public struct nariai
    {
        public string vardas;
        public string pavarde;
        public double pinigai;
    };
    static void Main(string[] args)
    {
        StreamReader failas = new StreamReader("nariai.txt");
        string a = failas.ReadLine();
        int nariuKiekis = int.Parse(a);
        nariai[] narys = new nariai[nariuKiekis];
        string[] info = new string[nariuKiekis];
        for (int i = 0; i < nariuKiekis; i++)
        {
            info[i] = failas.ReadLine();
            string[] informacija = info[i].Split(' ');
            narys[i].vardas = informacija[i];
            narys[i].pavarde = informacija[i + 1];
            narys[i].pinigai = double.Parse(informacija[i + 2]);
            Console.WriteLine("{0} {1} {2}", narys[0].vardas, narys[0].pavarde, narys[0].pinigai);
        }
    }
}
}

我的文件看起来像那样。

我在控制台中收到此错误。

为什么它没有显示“Almeda Norkute 25.70”?

c# .net
2个回答
8
投票

代替

narys[i].vardas = informacija[i];
narys[i].pavarde = informacija[i + 1];
narys[i].pinigai = double.Parse(informacija[i + 2]);

narys[i].vardas = informacija[0];
narys[i].pavarde = informacija[1];
narys[i].pinigai = double.Parse(informacija[2]);

你的informacija包含一行,一行总共有3个项目。如果您需要我访问这些,您会收到错误,因为您正在尝试访问不存在的位置。

并使用

Console.WriteLine("{0} {1} {2}", narys[i].vardas, narys[i].pavarde, narys[i].pinigai);

否则你总是在控制台写第一条记录;)


0
投票

代替信息[i],信息[i + 1]和信息[i + 2],分别使用信息[0],信息[1]和信息[2]。

并且还在console.writeline语句中使用索引i。

for (int i = 0; i < nariuKiekis; i++)
            {
                info[i] = failas.ReadLine();
                string[] informacija = info[i].Split(' ');
                narys[i].vardas = informacija[0];
                narys[i].pavarde = informacija[1];
                narys[i].pinigai = double.Parse(informacija[2]);
                Console.WriteLine("{0} {1} {2}", narys[i].vardas, narys[i].pavarde, narys[i].pinigai);
            }
© www.soinside.com 2019 - 2024. All rights reserved.