You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#实现1-9一维数值到3x3二维数组坐标的正确映射方案

索引越界的根本原因

你原来的坐标计算逻辑存在两个边界错误:

  • 当输入为3、6、9这类3的倍数时,input % 3的返回值为0,减1后x坐标为-1,直接超出数组索引的合法范围(C#数组索引从0开始,合法值为0、1、2)
  • 整数除法没有做0基转换,输入9时input/3结果为3,减1后y=2虽然合法,但搭配错误的x计算依然会触发异常。
正确坐标计算方法

1-9的输入是按行优先顺序对应3x3网格的,对应关系如下:

1(0,0)2(0,1)3(0,2)
4(1,0)5(1,1)6(1,2)
7(2,0)8(2,1)9(2,2)

只需要先把1-9的输入值减1,转换为0-8的0基准序号,再分别计算行列坐标即可,代码如下:

int zeroBase = input - 1;
// 行坐标y:整数除3得到0/1/2,对应三行
int y = zeroBase / 3;
// 列坐标x:模3得到0/1/2,对应三列
int x = zeroBase % 3;
完整可运行代码

建议加上输入合法性校验,避免非法输入导致程序崩溃:

// 读取并校验输入
if (!int.TryParse(Console.ReadLine(), out int input) || input < 1 || input > 9)
{
    Console.WriteLine("输入非法,请输入1-9范围内的整数");
    return;
}

string[,] numbers = { 
                    { " ", " ", " " },
                    { " ", " ", " " }, 
                    { " ", " ", " " }
                    };

// 计算坐标
int zeroBase = input - 1;
int y = zeroBase / 3;
int x = zeroBase % 3;

// 修改对应位置值
numbers[y, x] = "x";

// 打印数组验证结果
for (int row = 0; row < numbers.GetLength(0); row++)
{
    for (int col = 0; col < numbers.GetLength(1); col++)
    {
        Console.Write(numbers[row, col] + " ");
    }
    Console.WriteLine();
}

按以上逻辑计算,所有1-9的输入都能映射到合法索引位置,不会触发越界错误。

内容的提问来源于stack exchange,提问作者callumetheridge

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 01:09:57