【问题标题】:Calculate the 'center of an array' in Java在 Java 中计算“数组的中心”
【发布时间】:2013-11-21 01:30:15
【问题描述】:

这是我的问题:

给定一个长度为 6 的 int 数组,我想知道属于该数组的哪一对数字是它的中心。这意味着如果将数组分成 3 个长度 ==2 的小数组,并且如果将它们作为单对坐标放在矩阵中,(其中第一个坐标表示 i 的值,第二个表示j) 的值,你会在你的矩阵上得到一个类似“L”的东西。所以,中心是位于 L 中间的长度 = 2 的小坐标。我知道这很混乱,所以这是一张图片:

PD:唯一可用的“小数组”对是:

{array[0],array[1]}

{array[2],array[3]}

{array[4],array[5]}

希望你能帮助我!我正在制作游戏的逻辑!对不起我的英语!

【问题讨论】:

  • 你希望输入输出是什么?
  • 所以数组中的每两个数字定义了一个平面上的坐标,你想找到那个平面内的物理中心的元组吗?有点不清楚你在问什么?
  • 这个问题看不懂。
  • 你的例子是错误的!你的数组应该是|0|0|0|1|1|0|
  • 图片打错了,抱歉。坐标是 {0,0,0,1,1,0} 你是对的 Nathaniel,这就是我要找的东西!

标签: java arrays center


【解决方案1】:

你的例子是错误的!你的数组应该是|0|0|0|1|1|0|

一个简单的检查方法是:

|0|1|2|   3   |    4  |5| 
|x|y|x|y(+/-)1|x(+/-)1|y|
or
|0|1|   2   |3|4|    5  |
|x|y|x(+/-)1|y|x|y(+/-)1|

检查中心是否为 c(x=0,y=1):

检查 x(索引 0)的相同值是否在索引 2 中并且等于(索引 4 中的值 (+/-)1)AND 如果 y(索引 1)的相同值是在索引 3 中并等于(索引 5 中的值 (+/-)1)

OR 检查 x 的相同值(索引 0)是否在索引 4 中并且等于(索引 2 中的值 (+/-)1)AND 如果相同y 的值(索引 1)在索引 5 中且等于(索引 3 中的值 (+/-)1)

附言。在上述情况下,我将 L 长度固定为 1,您可以更改它并使用另一个值 4、5 等。

【讨论】:

  • 太棒了!但我认为这种方式只是证明数组具有 L 的几何形状,但是我如何找到 L 的中心?
  • 如果您的检查成功,则意味着第一个点 x=index 0 中的值,y = index=1 中的值是中心
  • @user2970305 你试过这个逻辑吗?
【解决方案2】:

当给定的单元格的三个坐标形成“L”形时,两个单元格将彼此相对。也就是说,这两个单元格将具有 (a,b) 和 (b,a) 之类的点。所以这两个以外的点都会成为中心。

因此,只需找到类似于 (a,b) 和 (b,a) 的两个点。另一点将是中心。

如果 First、second 和 three 是 (a,b) 形式的三个点 像

if(first.a==second.b && first.b=second.a)

        return three;

if(second.a==three.b && second.b==three.a)


     return first;

else return second;

【讨论】:

  • 不正确。它们将是相同的 +/- 偏移量,在提供的情况下,因为它从 0,0 开始将是 0-0 = 0。如果 L 指向不同的方向,则必须测试四个方向中的每一个也是。 (左/上、左/下、右/上、右/下)
【解决方案3】:

我不确定我是否理解你的问题,给你一个长度为 6 的任意数组,其中包含一些未知方向的 L 形,你必须返回数组中的切片,即中心?

那么,我们如何确定中心在哪里?这将是重复两次的 x 和 y 坐标。因此,只需查找重复两次的 x 值,然后查找重复两次的 y 值。你现在有了你的中心。

【讨论】:

    【解决方案4】:

    首先我无法正确理解您的问题。如果我理解正确,那么这里是解决方案。例如:您有一个长度为 10 的 int 数组。您想将每两个元素放在单独的数组中并在其中找到中间数组顺序。

    因此,如果您的输入数组的长度是偶数,则只需执行 (数组长度)/2 ,在我们的例子中是 5。那么显然,您的中间数组将是包含原始输入中第 5 个和第 6 个元素的数组数组

    如果您的输入数组的长度是奇数,那么只需执行 (数组长度+1)/2 ,在我们的例子中是 6。那么显然您的中间数组将是包含原始数组中第 6 个和第 7 个元素的数组输入数组。但在这种情况下,最后一个数组不会有第 j 个坐标。

    您尚未指定数组的长度。

    【讨论】:

      【解决方案5】:

      您可以使用 3 个点的数组。 Point 是一个包含 x 和 y 值的 Java 类。

      图中红色阴影的 3 点将是:

      0, 1
      0, 0
      1, 0
      

      另一组 L 形点是:

      2, 2
      3, 2
      3, 1
      

      【讨论】:

      • 当然,Point 类很好用,但仅此一项并不能帮助回答问题。
      • 不是真正的答案,但这最终挑战了原始 OP,以识别它们具有 3 对 {x,y} 的数组,而不是 6 对的数组。
      【解决方案6】:

      我相信您只是在寻找平均值:

      i = (array[0] + array[2] + array[4])/3;
      j = (array[1] + array[3] + array[5])/3;
      

      【讨论】:

      • 我没有对你投反对票,但这并不指向原始数组中的元组,只找到所有提供的元组的几何“中心”。考虑x= {0,0,0,4}:您的解决方案建议类似于{0,1.3},它不在原始数组中。
      • 我说它必须是一个长度为 6 的数组,而你的数组已经是一个“L”。这意味着您作为参数收到的数组已经具有 L 的几何形状!
      猜你喜欢
      • 2011-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-03
      • 1970-01-01
      • 2015-06-01
      • 2017-02-13
      相关资源
      最近更新 更多