Java无法读取代码的输出

时间:2015-12-16 04:38:06

标签: java

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

3 个答案:

答案 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;
}