我想根据点数组创建一个简单的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)”的值时,没有问题。为什么不允许更改其值?我该如何解决?
答案 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);
}
});
实例上增加x
或y
,则可以使用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);
}