【问题标题】:Java bidimensional array divided by major diagonalJava二维数组除以主对角线
【发布时间】:2017-08-28 18:51:43
【问题描述】:

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

这个双向阵列(板)可以被它的主对角线对角分割,如下所示:

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

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

提前谢谢你。

【问题讨论】:

  • 请注意,对角线有相同值的下标。你能以此为基础进行比较吗?如果仍有问题,请尝试编写一些代码并用代码更新您的问题。

标签: java arrays


【解决方案1】:

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

检查给定的 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;
}

【讨论】:

    【解决方案2】:

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

    如果你对两个点(开始和结束)都进行测试,你可以检查情况(例如,它们是在对边还是在同一边)......

    【讨论】:

    • 没有。就像我说的,我想评估坐标对 (row1, col1) 和 (row2, col2)。我想评估第一对是否在线上方/下方,然后第二对是否相反(或在线本身)。
    • 是的,但我无法弄清楚如何在不运行诸如 switch-case 检查每一行和每一列的巨大算法的情况下检测该对是高于还是低于。我想找一些数学计算来简化这个过程。
    • @jonypera 我有一个数学方程给你,但我不确定你真正想要什么。你能举几个例子吗?对于第1对坐标,不必检查是否在对角线上,但需要对第2对坐标进行这个检查?
    【解决方案3】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-07-24
      • 2020-03-19
      • 1970-01-01
      • 1970-01-01
      • 2011-05-25
      • 2023-03-28
      • 2016-07-23
      • 2011-02-21
      • 1970-01-01
      相关资源
      最近更新 更多