public int[] biggerTwo(int[] a, int[] b) {
int suma = 0;
int sumb = 0;
for(int x = 0; x < a.length; x ++){
a[x] += suma;
}
for(int x = 0; x < b.length; x ++){
b[x] += sumb;
}
if(suma >= sumb)
return a;
else
return b;
}
这是我写的用于返回最大总和的列表的代码。在CodingBat我只在两次测试中弄错了。
biggerTwo({1, 2}, {3, 4}) Mine returns {1,2}
biggerTwo({1, 1}, {1, 2}) Mine returns {1,1}
其他一切都是正确的,我不知道为什么。 另外,在else语句中我注意到,最初我还有其他if(sumb&gt; suma),我改变了,知道是否!(suma&gt; = sumb)这意味着sumb&gt; suma,但是当我键入else if时会导致错误吗?
如果有人能看到错误,我会很感激:D
答案 0 :(得分:7)
你感到困惑
a[x] += suma;
与
suma += a[x];
答案 1 :(得分:1)
在您的代码中,suma和sumb永远不会改变
您应该指定suma += a[x]
和sumb += b[x]
BTW,因为suma / b是整数数组的总和
我强烈建议您使用long
存储总和以避免溢出!
答案 2 :(得分:0)
您已经在循环体算术中交换了数组元素和正在求和的变量。另外,我会尝试通过将sumation提取到方法中来遵循DRY principle。类似的东西(使用for-each
loop),
static long sumArray(int[] arr) {
long sum = 0;
for (int val : arr) {
sum += val;
}
return sum;
}
然后biggerTwo
可以用ternary operation之类的
public int[] biggerTwo(int[] a, int[] b) {
return sumArray(a) < sumArray(b) ? b : a;
}