【问题标题】:Sum of the elements ArrayListArrayList 元素的总和
【发布时间】:2019-03-23 06:19:57
【问题描述】:

我是 Java 的初学者,并试图获取 ArrayList 中所有元素的总和。我是通过使用一种方法来做的,并在方法中得到这个错误:

"二元运算符'+'第一种类型的错误操作数类型:int,第二种 类型:对象”

我不知道我在这里做错了什么,感谢任何帮助!

public static int sumNumbers(<ArrayList> numbers){
    int sum = 0;
    for(int i = 0; i<numbers.size(); i++){
        sum+=numbers.get(i);
   }
    return sum;
}

【问题讨论】:

  • ArrayList numbers 应该是ArrayList&lt;Integer&gt; numbers,类型缺失。
  • ArrayList only 与ArrayList&lt;Object&gt; 基本相同(不完全是,但在您的问题的上下文中,您可以这样想)。因此在sum+=numbers.get(i); 中,编译器将操作视为int = int + Object。如果您将其更改为ArrayList&lt;Integer&gt;(或更好的List&lt;Integer&gt;),编译器将看到int = int + Integer,并且可以应用自动拆箱来获取int = int + int
  • 或者你必须明确地将其转换为 int
  • @NicholasK 您不能将Integer 对象投射int,您需要将其拆箱,例如通过Integer.intValue() 或让编译器为您执行此操作。
  • 你可以投下来然后调用.intValue()

标签: java arraylist methods


【解决方案1】:

numbers 声明为ArrayList&lt;Integer&gt; numbers。 然后Integer 将被拆箱为int。现在,您的 arraylist 包含可能不是 ints 的 objects

目前,numbers.get() 将返回一个object,您不能直接将object 添加到int

您总是可以将元素转换为 Integer,但我会推荐第一个选项。

【讨论】:

    【解决方案2】:

    这会很好。

    import java.util.ArrayList;
    
    public static int sumNumbers(ArrayList<Integer> numbers){
        int sum = 0;
        for(int i = 0; i<numbers.size(); i++){
          sum+=numbers.get(i);
        }
        return sum;
      }
    

    或者

    public static int sumNumbers(ArrayList<Integer> numbers){
        return numbers.stream().mapToInt(n->n).sum();
      }
    

    【讨论】:

      【解决方案3】:
      // create a list
      List<Integer> ints = Arrays.asList(1, 2, 3);
      
      // get the sum of the elements in the list
      int sum = MathUtils.sum(ints);
      

      【讨论】:

        【解决方案4】:

        正如其他人指出的那样,您需要为您的 ArrayList 指定一个类型。然后,您可以使用原生流使代码更紧凑:

        ArrayList<Integer> numbers = ... ;
        numbers.stream().mapToInt(i -> i).sum();
        

        【讨论】:

          猜你喜欢
          • 2020-05-14
          • 2014-05-06
          • 1970-01-01
          • 2020-02-27
          • 1970-01-01
          • 2021-03-30
          • 2012-11-07
          • 2022-10-18
          • 1970-01-01
          相关资源
          最近更新 更多