2014-09-03 45 views
-3

如何在follwing代码总和的ArrayList

import java.util.ArrayList; 
import java.util.List; 

public class SumInArrayList { 

public static void main(String[] args) { 

    List<Number> numbers = new ArrayList<Number>(); 
    numbers.add(new Number(44)); 
    numbers.add(new Number(55)); 
    numbers.add(new Number(11)); 
    numbers.add(new Number(1)); 

    for (int i = 0; i < numbers.size(); i++) { 
     System.out.println(numbers.get(i)); 
    } 
    } 
} 
+0

不完全确定你在问什么 - 你想找到列表中所有数字的总和? – jackarms 2014-09-03 05:14:58

+0

嗯,你在那里。一旦你得到了数字,你不应该用它们的整数值对它们进行某种数学运算吗? – Makoto 2014-09-03 05:15:21

+2

“Number”是什么类型的对象? – Jens 2014-09-03 05:21:28

回答

0

算上ArrayList中收集数之和你是八九不离十。您应该将它们一起添加到变量中,而不是打印这些元素。将变量初始化为0,然后合并元素。

此外,您不能实例化类Number,因为它是一个抽象类。 您应该使用与您要使用的数字相对应的更具体的类。 根据你的代码,Integer类将工作。

另一件事,因为java有unboxing,你可以直接添加原始类型。意思是说,你可以说numbers.add(44)而不是numbers.add(new Integer(44));

public static void main(String[] args) { 

    List<Integer> numbers = new ArrayList<Integer>(); 
    numbers.add(44); 
    numbers.add(55); 
    numbers.add(11); 
    numbers.add(1); 

    int sum = 0; 
    for (int i = 0; i < numbers.size(); i++) { 
     sum = sum + numbers.get(i); 
    } 

    System.out.println("Sum is " + sum); 
} 
1

你快到了。以下是我将如何做到这一点。

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

     List<Integer> numbers = new ArrayList<Integer>(); 
     numbers.add(new Integer(44)); 
     numbers.add(new Integer(55)); 
     numbers.add(new Integer(11)); 
     numbers.add(new Integer(1)); 

     int total = 0; 
     for (int i = 0; i < numbers.size(); i++) { 
      total += numbers.get(i); 
     } 

     System.out.println(total); 
    } 
} 

正如你可以看到我用Integer为简单起见。您可以将其更改为您想要的任何数据类型:Byte, Double, Float, Integer, Long, Short。如果你确实需要使用Number,那么你必须首先为其所有抽象方法提供实现,因为它是一个抽象类。像这样:

numbers.add(new Number() { 

    @Override 
    public int intValue() { 
     return 44; 
    } 

    @Override 
    public long longValue() { 
     return 44l;     
    } 

    @Override 
    public float floatValue() { 
     return 44.0f; 
    } 

    @Override 
    public double doubleValue() { 
     return 44.0 
    } 
}); 

但是不要这么做,请从所有已经实现这些的类中进行选择。