首页 > 解决方案 > 论点 1:无法从 'int[][]' 转换为 'int[*,*]'

问题描述

我正在尝试制作一个添加矩阵的行和列的应用程序。该应用程序背后的逻辑是您在文本框中输入矩阵的每一行,并用“/”分隔每一行。例如:1 2 3 4/1 2 3 4。我试图将值从字符串转换为整数,但我不断收到参数 1 错误。

编辑:忘记添加添加行的功能。

if (decision == 2)
{
    string[] tokens = a.Split('/');
    int[][] tokens1 = new int[][] {
        tokens[0].Split(' ').Select(Int32.Parse).ToArray(),
        tokens[1].Split(' ').Select(Int32.Parse).ToArray()
    };

    row_sum(tokens1, 2);
}

static void row_sum(int[,] arr, int orden)
{
    int i, j, sum = 0;

    // finding the row sum 
    for (i = 0; i < orden; ++i)
    {
        for (j = 0; j < orden; ++j)
        {

            // Add the element 
            sum = sum + arr[i, j];
        }

        // Print the row sum 
        Console.WriteLine("Sum of the row " +
                             i + " = " + sum);

        // Reset the sum 
        sum = 0;
    }
}

标签: c#

解决方案


您遇到的问题是您正在处理两种不同类型的数组:

  • tokens1是一个锯齿状数组 ( int[][]):它是一个数组数组。子数组 attokens1[0]可以是与数组 at 不同的长度tokens1[1]
  • arr是一个二维数组。尺寸是预定义的,第二个边界的长度永远不会基于第一个而改变。

有关二维数组与锯齿状数组的更多信息,请参见此处

您的问题的解决方案是row_sum接受与您正在创建的相同类型的数组,或创建与row_sum接受相同类型的数组。

最简单的选择可能是row_sum接受一个锯齿状数组:

 static void row_sum(int[][] arr)
 {

    int i, j, sum = 0;

    // finding the row sum 
    for (i = 0; i < arr.Length; ++i)
    {
        for (j = 0; j < arr[i].Length; ++j)
        {

            // Add the element 
            sum = sum + arr[i][j];
        }

        // Print the row sum 
        Console.WriteLine("Sum of the row " +
                             i + " = " + sum);


        // Reset the sum 
        sum = 0;
    }
 }

我冒昧地删除了长度值,因为它不是必需的,因为可以从数组本身获取此信息。


推荐阅读