我的同事们!
这是我目前正试图解决的问题。我们有2个阵列,让我们说:
a = new int[] {11, 12, 13, 14};
b = new int[] {121, 144, 169, 200};
我的任务是比较2个数组并检查121是否为11平方; 144是12平方;等等 那是我的伪代码:
我的代码:
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:感谢大家!问题已经解决了。我同意我犯了一个合乎逻辑的错误,这对经验丰富的程序员来说显而易见;虽然我看到我的问题被低估了,但是我花了很长时间才弄清楚错误,我相信值得问(对我而言)。答案 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)
假设a
和b
具有相同的大小并假设您使用的是Java 8,那么您可以这样做:
return (IntStream.range(0, a.length).filter(i->a[i]*a[i]!=b[i]).count())==0;