对数组中的所有奇数索引求和

时间:2014-11-11 21:17:51

标签: java arrays

我必须按照这些说明完成一个程序:

public class SumOddIndex {
    public static void main(String[] args){
       int[] array = {1,1,8,4,2,6};
       // Call the method sum, receive an integer value, and print the value on output. 
       // A call passing the example array should result in a value of 11. 
       // Use a while loop.
   }

这里编写一个名为sum的方法。方法sum应该采用int - 数组作为参数,并返回所有具有奇数索引号的数组单元格中所有值的总和。 使用一个WHILE-循环!     }

这是我到目前为止所尝试过的,但它无效。

public static void main(String[] args) {
        int[] array = {1, 1, 8, 4, 2, 6};
        sum(array);
}

public static int sum(int[] y){
   int sum = 0;
   int i = 0;
   while(y.len

   public static int sum(int[] y) {
      int sum = 0;
      int i = 0;
      while (y.length%2 == 1) {
         //y.length%2 == 1;
         sum += y[i];
         i++;
      }
      System.out.println(y[i]);
      return i;
   }
}

4 个答案:

答案 0 :(得分:4)

假设您使用的是java,请尝试以下方法:

int i = 0;
int sum = 0;
while(i < myArray.length){
   sum += myArray[i];
   i++;
}

这是一个while循环,只要你的计数器变量小于数组的大小就会执行(这样你就不会有索引超出界限)。在循环内部,它将向计数器索引处的值添加总和。

不要忘记在while循环中增加你的计数器,否则你将陷入无限循环。

修改

我误解了您的问题,但如果您只想汇总奇数值,请尝试以下方法:

while(i < myArray.length){
   if(myArray[i] % 2 == 1){ // If value is odd
      sum += myArray[i];
   }
   i++;
}

编辑2

要仅对奇数索引求和,请更改上面的代码以检查您的计数器是否为奇数而不是该索引处的值,如下所示:

while(i < myArray.length){
   if(i % 2 == 1){ // If index is odd
      sum += myArray[i];
   }
   i++;
}

或者,您可以开始索引为1并且每次增加2。我只会为这个提供伪代码:

// Start counter at 1
// While counter is less than array length
// Add element's value to the sum
// Increment counter by 2

答案 1 :(得分:2)

在Java 8中使用Streams,您可以将IntStreamfilter以及reduce缩减为总和:

int[] array = {1,1,8,4,2,6};
int sum = IntStream.range(0, array.length).filter(i -> i % 2 == 1).map(i -> array[i]).sum();

答案 2 :(得分:0)

我知道这个问题已经得到了解答,但我认为它仍然会有所帮助。

int i = 1;
int sum = 0;

while(i < myArray.length)
{            
    sum += myArray[i];  
    i += 2;
}

return sum;

我添加了@Logan Murphy的优化建议。

答案 3 :(得分:0)

使用流的过滤器并减少操作。

int [] array = {1,1,8,4,2,6}; int sum = array.stream()。filter(s-> s%2!= 0).reduce(0,Integer :: sum);