1

我需要实现一种方法,该方法返回具有奇数索引的所有元素的交替总和减去具有偶数索引的所有元素的总和。返回的总和应该是-11 - 4 + 9 - 16 + 9 = -1.

这是我的代码:

public class Arrays
{
public static void main(String[] args){

    int [] data = {1 ,4, 9, 16, 9};

    oddAndEven(data);
}

public static int[] oddAndEven(int[] data){
    int sum = 0;
    int sumA = 0;
    int index = data.length;
    for(int i:data){
    if(index % sumA == 1){
            sum = sum-i;
        }
    else{
        sum = sum+i;
    }
}
    System.out.println(sum);
    return sum;
    }
}

有人可以告诉我哪里出错了吗?

这是一堂课,所以请原谅我的基本代码和错误。

4

5 回答 5

1

那这个呢 ?

public class ArrayMeNow {

    public static void main(String[] args) {
        int [] data = {1 ,4, 9, 16, 9};

        int result = oddAndEven(data);
        System.out.println(result);
    }

    private static int oddAndEven(int[] data) {
        int multiplier = 1;
        int result = 0;

        for(int v:data){
            result += v * multiplier;
            multiplier *= -1;
        }

        return result;
    }

}
于 2013-02-17T18:35:59.383 回答
1
public static int oddAndEven(int[] data) {
    int sum = 0;

    for (int i=0;i<data.length;i++) {
        if (i % 2 == 1) {
            sum = sum - data[i];
        } else {
            sum = sum + data[i];
        }
    }
    System.out.println(sum);
    return sum;
}
于 2013-02-17T18:37:53.163 回答
1

for(int i:data)不会改变索引的值。并且sumA应该是2

将您的 for 循环更改为:

for (int i = 0; i < data.length; i++)
  if (i % 2 == 1)
    sum -= data[i];
  else
    sum += data[i];
于 2013-02-17T18:38:05.660 回答
1

我会这样做:

public class test {
    public static void main(String[] args) {

    int [] data = {1 ,4, 9, 16, 9};
    oddAndEven(data);
}

public static void oddAndEven(int[] data) {

    int total = 0;

    for (int i = 0; i < data.length; i++)
    {
        if (i%2==0)
            total = total + data[i];
        else
            total = total - data[i];
    }

    System.out.println(total);
}
  1. 我已经摆脱了方法中的 return 并将其更改为 void (因为您正在打印其中的结果,因此无需返回它。

  2. 您不需要两个不同的总和值,也不需要存储数组的长度。

  3. 使用总值并将其设置为 0。然后 for 循环遍历数组的长度。%2 将数字除以 2 并确定余数。所以对于第一个循环,它将计算 0/2 并计算出余数(显然是 0)。因为它 ==0,所以执行 for 循环中的第一个 if 语句(添加数字)。
    第二次通过,它计算 1/2,即 0,剩余 1 - 所以执行 else 语句,依此类推。

  4. 此外,请注意我是如何去掉 if 和 else 语句周围的大括号的。只要这些语句是单行,就不需要大括号 - 取出往往会使程序更易于阅读(在我看来)。显然,如果它们下面需要多于一行,则需要读取大括号。

于 2013-02-17T18:38:30.390 回答
1

您必须返回NOTsum类型。这是另一种方法。int int[]

public static int doAlternateAddSubOn(int[] array) {
    int sum = 0;
    for(int i=0; i<array.length; i++) {
        // When index 'i' is Even, the position is Odd
        sum = (i%2==0) ? sum+array[i] : sum-array[i];
    }
    return sum;
}
于 2013-02-18T04:28:44.400 回答