ArrayList中操作++ /-的无效参数

时间:2019-01-01 15:44:14

标签: java arrays list arraylist

我想根据点数组创建一个简单的2D直方图。

类积分

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


public class Points {
    static List<List<Integer>> histogram = new ArrayList<List<Integer>>();

    public static void createHistogram(List<Point> point,int max) {     
        for(int x = 0; x < max; x++) {
            histogram.add(new ArrayList<Integer>());
            for(int y = 0; y < max; y++) {
                histogram.get(x).add(0);
                System.out.print((histogram.get(x).get(y)) +" ");
            }
            System.out.println();
        }

        for(int x = 0; x < point.size(); x++)
            histogram.get(point.get(x).x).get(point.get(x).y)++;
    }

    public static void main(String[] args) {
        List<Point> points = new ArrayList<Point>();

        points.add(new Point(0,10));
        points.add(new Point(1,2));
        points.add(new Point(2,5));
        points.add(new Point(1,2));


        createHistogram(points,10);
    }


}

积分班

public class Point{
    public int x = 0;
    public int y = 0;

    Point(int x, int y){
        this.x = x;
        this.y = y;
    }
}

当我尝试增加直方图的值时,出现“ Invalid parameter to operation ++ /-”错误。这是为什么?当我打印“ histogram.get(point.get(x).x).get(point.get(x).y)”的值时,没有问题。为什么不允许更改其值?我该如何解决?

2 个答案:

答案 0 :(得分:2)

  

那是为什么?

因为递增和递减运算符只能应用于变量(局部变量或类变量)或数组元素。您正在尝试将其应用于函数调用的返回值-但操作员无法知道如何将新值写回。

相反,您需要获取值,将其添加一个,然后通过适当的setter方法设置值。

请注意,如果您尝试在toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); //close activity overridePendingTransition(R.anim.your_anim, R.anim.your_anim); } }); 实例上增加xy,则可以使用Point来做到这一点:

++

但是thePoint.y++; 尝试在histogram.get(point.get(x).x).get(point.get(x).y)++;的返回值上执行此操作。

答案 1 :(得分:1)

for(int x = 0; x < point.size(); x++)
        histogram.get(point.get(x).x).get(point.get(x).y)++;

尝试

for(int x = 0; x < point.size(); x++) {

    List<Integer> list = new ArrayList<Integer>(histogram.get(point.get(x).x));
    list.set(point.get(x).y, point.get(x).y + 1);
    histogram.set(point.get(x).x, list);
}