有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

向量Java中所有元素的总和

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的和。我想在添加向量的每个元素后打印“Sum:90”。我不知道如何在java中为向量逐个元素添加元素,我尝试查找其他问题,但它们主要与数组相关。感谢您的帮助。谢谢大家!


共 (5) 个答案

  1. # 1 楼答案

    使用Java Streams API:

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

    说明:

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

    向量元素和:

    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));
        }
    }
    
  3. # 3 楼答案

    你可以这样做:

        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是一种非常古老的数据结构。现在通常使用类似ListArrayList

  4. # 4 楼答案

    可以在向量本身上添加调用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()的文档,如果您想进一步调查的话

  5. # 5 楼答案

    有多种方法可以做到这一点

        // 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是一种非常古老的数据结构