避免索引的功能超出矩阵维度'

时间:2014-10-07 22:47:24

标签: arrays matlab

我有MATLAB的问题 - 或者至少我现在无法解决它,如果我照看那个特定的错误信息比我得到非常复杂的例子。带到它的总基数,我的问题看起来如下:

我必须编写一个Connect-Four游戏。游戏领域以零的形式初始化:

    Field = zeros([6 7]);

稍后,我必须检查胜利条件。但是,如果我做了类似

的事情
    if GameField(7, 7) == xxx
然后它显然失败了,因为游戏领域只有六列。准确的错误消息是'索引超出矩阵维度' - 我完全可以理解为什么会这样。

是否有任何函数可以帮助我避免该错误(以编程语言中的try-catch方式)。我知道例如有一个名为exists的函数,但这只适用于变量等 - 但不适用于矩阵维度。在处理对角线值时,使用length() - 函数会非常棘手。我实际上正在寻找能够实现以下功能的功能(我不知道名字)

    if valueExists(GameField(7, 7))
      %do something
    else
      %do something other
    end

1 个答案:

答案 0 :(得分:0)

您知道字段的大小,将其存储在名为fieldSize的变量中。

fieldSize = [6 7];

因此,您可以方便地将字段初始化为

Field = zeros(fieldSize);

接下来,当您要执行检查时,例如当前位置右下角的值是否为1,您可以始终先检查fieldSize

currentPosition = [1 7];
bottomRight = currentPosition - [1 1];
if any(bottomRight < 1 | bottomRight > fieldSize)
   % do not check b/c out of field
else
   % perform check
end

或者,您可以优化搜索策略,这样您就不会首先看到该字段。例如,从左下到右上角的四个对角线永远不会在第5:7列中开始。