C# 如何在双格式C中查找二维字符串数组的计算?

C# 如何在双格式C中查找二维字符串数组的计算?,c#,arrays,multidimensional-array,sum,console-application,C#,Arrays,Multidimensional Array,Sum,Console Application,我有一个C语言的控制台应用程序,它允许用户输入一周中的5天,然后在单个2D数组中输入5个和天数对应的数值 数组是字符串格式的,所以我试图解析字符串数据的后半部分并生成它们的总和,但它说我的索引超出了范围,有什么想法吗 代码如下: //要求用户输入一周中的五天以及每天的降雨量数据 双雨和=0; Console.Write请输入一周中的5天。; //将数据存储在名为rainfallData[]的二维字符串数组中 对于int i=0;i

我有一个C语言的控制台应用程序,它允许用户输入一周中的5天,然后在单个2D数组中输入5个和天数对应的数值

数组是字符串格式的,所以我试图解析字符串数据的后半部分并生成它们的总和,但它说我的索引超出了范围,有什么想法吗

代码如下:

//要求用户输入一周中的五天以及每天的降雨量数据 双雨和=0; Console.Write请输入一周中的5天。; //将数据存储在名为rainfallData[]的二维字符串数组中 对于int i=0;i<2;我++ { 对于int j=0;j<5;j++ { rainfallData[i,j]=Console.ReadLine; } 如果i==0 { Console.WriteLine请输入相应的雨量数据。; } } Console.WriteLineData放置在raindallData[]数组中。; 对于int i=0;i<2;我++ { Console.WriteLine; 对于int j=0;j<5;j++ { WriteLinerainfallData{0},{1}={2},i,j,rainfallData[i,j]; } } //使用迭代从rainfallData[]中的值计算以下值: //一笔 Console.WriteData使用迭代计算的值\n rainfallData[]=的总和; 对于int i=1;i 如果我是你,我会这样开始我的代码:

int columns = 2;
int days = 5;

string [,] rainfallData = new string[columns, days];
现在,每次引用每个维度的边界时,都分别使用列和天

您可以这样编写代码:

//Ask the user to enter five days of the week and rainfall data for each day
Console.WriteLine("Please enter 5 days of the week.");

//Store the data in a two dimensional string array named rainfallData[]

for (int j = 0; j < days; j++)
{
    rainfallData[0, j] = Console.ReadLine();
}
Console.WriteLine("Please enter the corresponding rain data.");
for (int j = 0; j < days; j++)
{
    rainfallData[1, j] = Console.ReadLine();
}

Console.WriteLine("Data placed in raindallData[] array.");

for (int i = 0; i < columns; i++)
{
    Console.WriteLine();
    for (int j = 0; j < days; j++)
    {
        Console.WriteLine("rainfallData({0},{1})={2}", i, j, rainfallData[i, j]);
    }
}

//Use iteration to calculate the following from the values in rainfallData[]:
//a) sum
double rainsum = 0.0;
Console.Write("Data values calculated using iteration. \n a) Sum of rainfallData[] = ");
for (int i = 0; i < columns; i++)
{
    Console.WriteLine();
    for (int j = 0; j < days; j++)
    {
        rainsum += double.Parse(rainfallData[i, j]);
    }
}
Console.WriteLine(rainsum);
这里有一个更可靠的方法:

double[] readNumbers(int items, string title)
{
    Console.WriteLine($"Please enter {items} of {title} data.");
    int attempt = 0;
    return
        Enumerable
            .Range(0, items)
            .Select(x =>
            {
                double result;
                while (!double.TryParse(Console.ReadLine(), out result))
                {
                    Console.WriteLine($"Input not a number. Please try again.");
                }
                return result;
            })
            .ToArray();
}

int days = 5;

double[] first = readNumbers(days, "first columnn");
double[] second = readNumbers(days, "rain data");

double[][] rainfallData = new[] { first, second };

Console.WriteLine("Data placed in raindallData[][] jaggard array.");
Console.WriteLine(String.Join("", Enumerable.Range(0, days).Select(x => $"rainfallData[0][{1}]={rainfallData[0][x]}\n")));

Console.WriteLine(String.Join(Environment.NewLine, Enumerable.Range(0, days).Select(x => $"rainfallData[1][{1}]={rainfallData[1][x]}")));

double rainsum = rainfallData.Sum(i => i.Sum());
Console.WriteLine($"Data values calculated using iteration. \n a) Sum of rainfallData[][] = {rainsum}");

不要使用二维数组。和他们一起工作总是乱七八糟的。使用jaggard数组-即字符串[][]。您认为显示rainfallData的声明可能很重要,因为您有一个索引是越界错误吗?您是否想过rainfallData.Length的值是多少?添加一些输出以协助调试此错误。打印使用迭代计算的数据值后,添加Console.WriteLinerainfallData.Length-这将告诉您外部循环迭代的次数。行上方的rainsum+=double.ParserainfallData[i,j];,add Console.WriteLinerainfallData[i,j]-这将告诉您错误发生在哪个索引处。我必须使用这个愚蠢的字符串数组进行赋值:/i将使用rainfallData声明进行更新!所以我刚把rainfallData.Length改为2,这就解决了这个问题???知道为什么吗?非常感谢!你处理这个问题的方式中的一些术语我不太明白,但我必须在作业的最后部分使用锯齿数组,这肯定会帮助我更好地理解我应该如何去做。我真是太感谢你了!!当你开始撞到墙的时候,编程会变得非常可怕
double[] readNumbers(int items, string title)
{
    Console.WriteLine($"Please enter {items} of {title} data.");
    int attempt = 0;
    return
        Enumerable
            .Range(0, items)
            .Select(x =>
            {
                double result;
                while (!double.TryParse(Console.ReadLine(), out result))
                {
                    Console.WriteLine($"Input not a number. Please try again.");
                }
                return result;
            })
            .ToArray();
}

int days = 5;

double[] first = readNumbers(days, "first columnn");
double[] second = readNumbers(days, "rain data");

double[][] rainfallData = new[] { first, second };

Console.WriteLine("Data placed in raindallData[][] jaggard array.");
Console.WriteLine(String.Join("", Enumerable.Range(0, days).Select(x => $"rainfallData[0][{1}]={rainfallData[0][x]}\n")));

Console.WriteLine(String.Join(Environment.NewLine, Enumerable.Range(0, days).Select(x => $"rainfallData[1][{1}]={rainfallData[1][x]}")));

double rainsum = rainfallData.Sum(i => i.Sum());
Console.WriteLine($"Data values calculated using iteration. \n a) Sum of rainfallData[][] = {rainsum}");