繁体   English   中英

Vector Java中所有元素的总和

[英]Sum of all the elements in a Vector Java

爪哇 11.6

我有一个大小为 8 的向量,根据用户输入的 1 到 8 之间的数字,我的代码将随机生成值以放置在名为 vec_1 的向量中。

因此,例如,输出看起来像

Enter the number of trials: 
>> 4 
Trials    Random Value
1           10
2           20
3            0
4           60

值 <10,20,0,60> 保存在名为 vec_1 的向量中,然后我使用

Enumeration enu = vec_tor.elements();
while(enu.hasMoreElements()) {
   for (int i = 1; i<=4; i++) {
     System.out.printf("\n     " + String.valueOf(i));
     System.out.printf("      " + String.valueOf(enu.nextElement()));
   }
 }

并排打印出向量中的元素。 我想将向量中的所有数字加在一起得到一个总和,所以 10+20+0+60 = 90。我想在添加向量的每个元素后打印“总和:90”。 我不确定如何在 java 中为向量逐个元素添加元素,我尝试查找其他问题,但它们主要与数组有关。 任何帮助表示赞赏。 谢谢!

使用 Java Streams API:

int sum = test.stream()
    .mapToInt(Integer::valueOf) // or .map(i -> i)
    .sum();

解释:

  • test是一个Vector<Integer>
  • 实现java.util.Collection类必须实现stream方法。 这使程序员能够使用 Stream API。 Vector还实现了Collection
  • mapToInt是一种方法,它使从流中提取的所有元素都映射到原始int 这由IntStream类表示。 我们通过执行i -> i (通过自动拆箱)或通过Integer::valueOfInteger映射到相应的int
  • IntStream实现了sum()方法,这正是我们所需要的。

您可以在向量本身上添加调用add()元素。 然后您可以使用stream()将所有元素相加并返回总和。

import java.util.*;

class VectorTest {
    public static void main(String[] args) {
        Vector<Integer> vec_tor = new Vector<>(); 

        vec_tor.add(10); 
        vec_tor.add(20); 
        vec_tor.add(0); 
        vec_tor.add(60); 

        System.out.println(vec_tor);

        int sum = vec_tor.stream().reduce(0, Integer::sum);
        System.out.println("Sum of vector elements: " + sum);
    }
}

上面的代码会输出:

[10, 20, 0, 60]
Sum of vector elements: 90

如果您想进一步研究,这里是有关Vector.add()Stream.reduce()的文档。

向量元素总和:

Integer sum = v.stream()    // convert to stream
  .reduce(0,Integer::sum);  // add all elements to initial zero value

来自向量的数组:

Integer [] a = v.toArray(new Integer[0]); // vector to array

单元测试

package example;

import org.junit.Test;

import java.util.Arrays;
import java.util.Vector;

import static org.hamcrest.MatcherAssert.*;
import static org.hamcrest.Matchers.*;

public class VectorSumTest {
    @Test
    public void sumVector() {
        Integer [] data = {10,20,0,60};
        Vector<Integer> v = new Vector<>(Arrays.asList(data));
        Integer sum = v.stream().reduce(Integer::sum).get(); // vector elements sum
        assertThat(sum, equalTo(90));
    }
}

有多种方法可以做到

    // using iterator
    Iterator<Integer> it = vec_tor.iterator();
    int sum = 0;
    while(it.hasNext()) {
        sum+=it.next();
    }
    System.out.println("sum:" + sum);

    // using enumeration
    sum = 0;
    Enumeration<Integer> enumeration = vec_tor.elements();
    while (enumeration.hasMoreElements()){
        sum+=enumeration.nextElement();
    }
    System.out.println("sum:" + sum);

    // using simple foreach loop
    for (int element: vec_tor) {
        sum += element; 
    }
    System.out.println("sum:" + sum);

您可以在此处使用ArrayList而不是Vector ,因为Vector是一种非常古老的数据结构。

你可以这样做:

    Vector<Integer> vector = new Vector<>();
    // add elements

    long sum = 0;
    for (Integer x : vector) {
        sum += x; // sum = sum + x;
    }
    System.out.println("Sum: " + sum);

for 循环只是遍历每个元素。 不需要复杂的枚举结构。 它还尊重存储在 Vector 中的实际元素计数。

注意:Vector 是一种非常古老的数据结构。 现在通常使用像ArrayList这样的List

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM