【问题标题】:How to write a function with a 2-dimensional array as its argument?如何编写一个以二维数组为参数的函数?
【发布时间】:2014-11-20 03:43:51
【问题描述】:

我是 C# 的新手。

我有一个名为“board”的二维数组:

short[,] board = new short[8,8];

我正在使用一个名为“color”的函数,如果一个白色棋子在正方形 [i,j] 上返回“白色”,如果黑色棋子在正方形 [i,j] 上返回“黑色” , 如果正方形 [i,j] 为空,则为“无”。

if(color[board[i,j]]==White)
{
    do something
}

static string color(short[,,,,] t)
        {
            string Color;

            if(t[m,n]==X)
            {
                Color=None;
            }

            if(t[m,n]==WP || t[m,n]==WN || t[m,n]==WB || t[m,n]==WR || t[m,n]==WQ || t[m,n]==WK)
            {
                Color=White;
            }

            if(t[m,n]==BP || t[m,n]==BN || t[m,n]==BB || t[m,n]==BR || t[m,n]==BQ || t[m,n]==BK)
            {
                Color=Black;
            } 

            return Color;
        }

X, WP, BP, WN, BN, etc..., 只是我之前声明的代表棋子的东西:X=Nothing, WP=White Pawn, BP=Black Pawn, WN=White kNight , BN=黑骑士等...

但是我不知道怎么写颜色函数。我在哪里声明变量mn?我希望它们分别对应变量 i 和 j。

而且我什至不确定如何在 Main.js 中调用该函数。我写color[board[i,j]]color[board, i, j] 还是别的什么?

【问题讨论】:

    标签: c# arrays function multidimensional-array


    【解决方案1】:

    为了简化这个问题,您需要更改颜色方法的签名。我会成功的

    public static string Color(short piece)
    {
        string color = String.Empty;
    
        //Because we are passing in the short array value we don't 
        //need to get it from the array we can just use it eg:
        if(piece == WP)
            color = "White";
    
        //Your other if statements go here
        return color;
     }
    

    然后调用你会使用的方法

    if (Color(board[i][j]) == "White")
    {
        //Do stuff
    }
    

    我想说明一些额外的事情,方法的 C# 命名约定是以大写字母开头,如果您使用 ENUM 来表示片段而不是短常量,您的代码可能会更好。

    编辑:

    如果您要使用 ENUM,它看起来像这样

    enum Pieces { WP, WN, WB /* etc... */ }
    

    这是一个更好的解决方案,因为每个部分都没有与之关联的显式值,这一切都是自动完成的。此外,它更简洁,因为您在课堂开始时没有十行解释所有部分,这更短更简洁。

    【讨论】:

    • 感谢您的回答。但是您能否详细说明“使用 ENUM 来表示片段”? (我必须承认,在开始编写我的程序之前,我在使用字符串还是使用短裤作为棋子之间犹豫不决)你的意思是这样吗? :枚举片段:int {X,WP,WN,WB,WR,WQ,WK,BP,BN,BB,BR,BQ,BK};为什么使用 ENUM 比使用短常量更好?
    • 不客气,我已经编辑了我的帖子来解释我对枚举的意思。
    【解决方案2】:

    尝试这样做:

    static string color(short[,] t, int m, int n)
    {
        var colors = new Dictionary<string, short[]>()
        {
            { None, new [] { X } },
            { White, new [] { WP, WN, WB, WR, WQ, WK } },
            { Black, new [] { BP, BN, BB, BR, BQ, BK } },
        };
    
        return
            colors
                .Where(x => x.Value.Contains(t[m, n]))
                .Select(x => x.Key)
                .FirstOrDefault();
    }
    

    注意:我假设 NoneWhiteBlack 是变量,否则如果您指的是字符串文字,它们需要用双引号括起来。

    【讨论】:

      猜你喜欢
      • 2018-05-05
      • 1970-01-01
      • 1970-01-01
      • 2016-02-07
      • 2018-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-07
      相关资源
      最近更新 更多