如何累计2D ArrayList对象中的值?

时间:2017-08-23 20:09:44

标签: java

这是我尝试创建整数的2D ArrayList对象。 构造函数,fillArray和displayArray方法似乎有效(除了在我的每个整数周围显示括号,我不明白)。

问题在于我不知道如何处理我填充到2D ArrayList对象中的值以进行求和。

import java.util.ArrayList;
import java.util.Random;

public class TwoDArray
{
    // fields
    private ArrayList<Integer>[][] myList;
    private int listSize;

    // methods
    /**
     * The constructor creates a 2D ArrayList object.
     */
    @SuppressWarnings("unchecked")
    public TwoDArray(int size)
    {
        listSize = size;
        myList = new ArrayList[size][size];

        for (int i = 0; i < size; i++)
            for (int j = 0; j < size; j++)
                myList[i][j] = new ArrayList<Integer>(size);
    }

    /**
     * The fillArray method fills the 2D ArrayList object
     * with randomly generated numbers between 0 and 99.
     */
    public void fillArray()
    {
        Random rand = new Random();

        for (int i = 0; i < listSize; i++)
        {
            for (int j = 0; j < listSize; j++)
            {
                myList[i][j].add(rand.nextInt(100));
            }
        }
    }

    /**
     * The displayArray method displays the 2D
     * ArrayList object.
     */
    public void displayArray()
    {
        for (int i = 0; i < listSize; i++)
        {
            for (int j = 0; j < listSize; j++)
            {
                System.out.print(myList[i][j] + " ");
            }
            System.out.println();
        }
    }

    /**
     * The getTotal method sums the values in the
     * 2D ArrayList object.
     * @return The sum of the values.
     */
    public int getTotal()
    {
        int total = 0;

        for (int i = 0; i < listSize; i++)
            for (int j = 0; j < listSize; j++)
                total += myList[i][j].get(j); // don't know what to do here

        return total;
    }

1 个答案:

答案 0 :(得分:0)

您创建了一个ArrayList数组,并且只为这些ArrayList提供了 ONE 值,因此要将所有这些值相加,您只需要从中获取第一个值每个:

for (int i = 0; i < listSize; i++)
    for (int j = 0; j < listSize; j++)
        total += myList[i][j].get(0);

如果你尝试get(1),那么你会得到IndexOutOfBoundsException,因为它不存在

旁边,您创建ArrayList,并仅存储 ONE 元素,因此只能使用int[][]

但是如果你需要在每个框中存储多个值,比如像这样添加它们:

for (int i = 0; i < listSize; i++){
    for (int j = 0; j < listSize; j++){
        myList[i][j].add(rand.nextInt(100));
        myList[i][j].add(rand.nextInt(100));
        myList[i][j].add(rand.nextInt(100));
    }
}
// In each box you'll have a List, containing 3 values

要获得ALL int的总和,您可以这样做:

for (int i = 0; i < listSize; i++)
    for (int j = 0; j < listSize; j++)
        total += myList[i][j].stream().mapToInt(Integer::intValue).sum();  

这将汇总每个方框的所有元素