Java二维数组除以主对角线

时间:2017-08-28 18:51:44

标签: java arrays

我正在使用Java中的二维数组来进行类似Tile[8][8]的棋盘游戏来代表我的棋盘。

这个bidimensioanal阵列(板)可以通过它的主要对角线沿对角线划分,如下所示:

enter image description here

与此对应的位置是:(0,0); (1,1); (2,2); (3,3); (4,4); (5,5); (6,6); (7,7)。

给定两对坐标(row_startcol_start)和(row_finalcol_final),我需要了解彼此是否在相对的两侧(或右侧)在对角线本身)对角线。

提前谢谢。

3 个答案:

答案 0 :(得分:3)

这将帮助您查看x和y之间的模式:

enter image description here

检查给定的x,y坐标是否落在从西北到东南的对角线上:

public boolean isOnDiagonalLineNW_SE(int x1, int y1){
    return x1 == y1;
}

检查对角线<<>>

public boolean isAboveDiagonalLine(int x1, int y1){
    return y1 > x1;
}

检查对角线<<>>

public boolean isBelowDiagonalLine(int x1, int y1){
    return x1 > y1;
}

答案 1 :(得分:1)

对于某个点(x, y),请测试x > y。 当坐标x等于y时,该点位于对角线上方。如果x > Y,他在顶部三角形上,否则,他处于低位...

如果您对两个点(开始和最终)进行测试,您可以检查情况(例如,如果它们位于相反侧或相同位置)......

答案 2 :(得分:1)

在这个概念中似乎有一个简单的重复模式,也就是说,在列和行中重复的所有整数都是“在对角线上”......因为它是一个正方形。这一分钟不再是一个正方形,这个计算变得无用,因此绝对不是这个问题的“最佳”解决方案。

你可以做一些非常简单的检查,比如......

if(row_start == col_start || row_final == col_final)。这会显示对角线 ON 的数字。一旦你知道这些信息,你可以说if(row_start > col_start)(然后你知道它在对角线的右边)或if(row_start < col_start)(然后你知道它在对角线的左边)

如果电路板不是方形或“可能”是一个矩形,但在运行时间后无法改变,那么也可以采用更加动态的方法。首先,您可以“发现”您想要记住的对角线作为棋盘上的标记位置,并将其存储在数组中以便记住它。您将使用循环从0,0开始并快速迭代板的长度和宽度,以找到您想要成为新对角线的位置。当您发现每个位置时,您会将值记录到数组中(2D数组可以工作,但我建议一个对象数组甚至可以枚举,以便可以轻松存储每个的行/列)。现在您已经知道了新的对角线并将其存储在内存中,如果线路在对角线上方,上方,下方或旁边,现在可以非常容易地进行验证。该变量应该持续该视图的长度,并且成为核心应用程序状态变量,以便在未来的规则和诸如此类的情况下保持对该对角线的关注。