如何从键盘输入给二维数组赋值

3
我正在为学校编写C#代码,但有一道练习让我非常头痛。
具体来说,我需要开发一种代码,允许用户从键盘设置一个 2D 数组(5x5)的值(即在数组中输入“x”)。这意味着在运行程序时,用户应该能够在数组中设置一个值,例如“我想在2,5和3,1位置上设置一个“x””。但我不知道如何做到这一点。已经两个星期了,但我还是无法解决。
以下是我目前为止的代码(感谢所有人的帮助,特别是BradleyDotNET的支持):
int[,] data = new int[5, 5]; 

    public void load()
    {
        string[] input = Console.ReadLine().Split('=');
        string[] coordinates = input[0].Split(',');

        int[] intCoordinates = coordinates.Select(s => int.Parse(s)).ToArray();

        data[intCoordinates[0]][intCoordinates[1]] = int.Parse(input[1]);  
    }

    public void view()
    {
        Console.WriteLine("Matrix created is:");
        for (int i = 0; i <= 4; i++)
        {
            Console.Write("\n");
            for (int j = 0; j <= 4; j++)
            {
                Console.Write(data);
            }
        }
        Console.ReadKey();
    }


    static void Main(string[] args)
    {

        Program objeto = new Program();
        objeto.load();
        objeto.view();   

        Console.ReadKey();

        Console.Clear();

我还需要添加一个功能,允许用户添加他想要的任意数量的“x”到矩阵中,但我打算用“switch”来完成这个功能。
那么,如何通过键盘设置2D数组中的值?
更新:我在这里犯了一个错误,在“data”内的第10行。它说:“[]内的索引号不正确,应该是2”。

将其分解为较小的问题。从键盘读取一个值。从键盘读取两个值。检查值是否在范围内。根据输入设置数组的值。你在哪一步遇到了困难? - Floris
这是从键盘设置值的代码,我之前尝试过类似于"SetValue[a,b]=int.Parse(Console.Readline());"的方式,先声明"a"和"b",但没有成功。我相当确定一定有更好的方法,或者我可能漏掉了什么。 - Gabbo2483
但是“不起作用”并不能作为一个问题报告。请发布您尝试的代码以及完整的错误细节。 - H H
是的,你说得对,“i”和“j”其实可以省略,即使不写这两个变量,代码仍然能正常工作。 - Gabbo2483
谢谢Henk的回答。如果我有什么可以发布的错误信息,我会把它发布出来的,但是我不知道如何设置值T_T。 - Gabbo2483
显示剩余2条评论
2个回答

1

您没有指定输入的格式,所以我会自己编一个。如果输入是“2,4=10”(意思是将element[2][4]设置为10),那么代码如下:

string[] input = Console.ReadLine().Split('=');
string[] coordinates = input[0].Split(',');

int[] intCoordinates = coordinates.Select(s => int.Parse(s)).ToArray();

matrix[intCoordinates [0]][intCoordinates [1]] = int.Parse(input[1]);

这段代码存在一些问题,没有范围验证,如果用户输入的不是int类型,就会抛出异常。我将把这些作为你的练习,但如果你遇到问题,请随时问我。
简单解释一下,我们使用Console.ReadLine获取整行输入。然后我们在“=”字符上进行分割,以获取坐标和所需值。然后我们在“,”上对坐标进行拆分,以获取不同的索引。
您不能使用字符串作为数组索引,因此我们调用Select在每个字符串上调用int.Parse()函数,返回一个新的int数组。
最后,我们使用解析后的索引来索引matrix并将其设置为从输入中解析出的值。

嗯...你能试着翻译一下吗?我不懂西班牙语。至于第一点,我已经更新了我的代码,我认为这样会修复它。 - BradleyDotNET
对于第二个,我编了一个变量名。请使用“matrix”代替“data”。 - BradleyDotNET
第一条可能是这样的:“无法将“System.Collections:generic:IEnumerable<int>”转换为“int[]”,因为已经有一个显式转换。请检查是否缺少一个转换。” - Gabbo2483
也许这是个愚蠢的问题,但是你怎么做到的呢?抱歉,我学习编程才一个月T-T。 - Gabbo2483
请检查我的第三行代码,我在其后添加了 "ToArray" 以将 IEnumerable 转换为数组。 - BradleyDotNET
显示剩余5条评论

0

像这样的东西应该能帮到你。

 public void load()
    {
        for (int i = 0; i <= 4; i++)
        {                
            for (int j = 0; j <= 4; j++)
            {
                Console.WriteLine("enter value for {0},{1}", i, j);
                matrix[i,j]= int.Parse(Console.ReadLine());
            }
        }
    }

顺便提一下,在您的view方法中,从0到4开始循环。


这是用于填充整个数组的正确方法,但不适用于设置单个值(似乎问题是关于此的,但也许我读错了)。 - BradleyDotNET
@BradleyDotNET 我根据视图方法做出了假设。 - gmail user
其实,您需要设置一个值来查看整个矩阵 >-<,这就是为什么"视图"会加载完整的矩阵。 - Gabbo2483
我按照建议修复了循环,现在我要尝试一下。谢谢。 - Gabbo2483

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接