检查一个数组的元素是否是另一个数组的平方数

时间:2016-05-22 12:22:09

标签: java algorithm

我的同事们!

这是我目前正试图解决的问题。我们有2个阵列,让我们说:

a = new int[] {11, 12, 13, 14};
b = new int[] {121, 144, 169, 200};

我的任务是比较2个数组并检查121是否为11平方; 144是12平方;等等 那是我的伪代码:

  1. 表示数组a中的每个int以及数组b中的每个int
  2. 检查b中的= i int j中的int i乘以其自身,然后返回true。
  3. 否则,返回false。
  4. 我的代码:

    public static boolean squared(int[] a, int[] b) {
    for (int i : a)
      for (int j : b)
      if (b[j] == a[i]*a[i])
      return true;
      return false;
      } 
    }
    

    这种算法逻辑对我来说似乎很公平;然而,它未能通过测试(我在线解决它)。由于我是一个新手,我想知道更有经验的程序员会说什么,为什么它没有通过测试?必须在伪代码和代码本身中进行哪些更改,以便在121 = 11 * 11时输出为true,在200 = 14 * 14时为false? 提前谢谢。

    UPD:感谢大家!问题已经解决了。我同意我犯了一个合乎逻辑的错误,这对经验丰富的程序员来说显而易见;虽然我看到我的问题被低估了,但是我花了很长时间才弄清楚错误,我相信值得问(对我而言)。

2 个答案:

答案 0 :(得分:0)

您使用带有整数数组的增强型for循环。

在这种情况下,对于a = new int[] {11, 12, 13, 14},第一个循环中的a[i]代表a[11],并会抛出IndexOutOfBoundException

你应该替换

for (int i : a)

for (int i = 0 ; i < a.length ; i++)

答案 1 :(得分:0)

假设ab具有相同的大小并假设您使用的是Java 8,那么您可以这样做:

return (IntStream.range(0, a.length).filter(i->a[i]*a[i]!=b[i]).count())==0;