Неверный аргумент для операции ++ / - в ArrayList - PullRequest
0 голосов
/ 01 января 2019

Я хочу создать простую 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;
    }
}

Я получаю "Неверный аргумент дляОперация ++ / - "ошибка при попытке увеличить значение гистограммы.Это почему?Когда я печатаю значение «histogram.get (point.get (x) .x) .get (point.get (x) .y)», проблема не возникает.Почему изменение его значения не допускается?Как я могу это исправить?

Ответы [ 2 ]

0 голосов
/ 01 января 2019
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);
}
0 голосов
/ 01 января 2019

Почему это так?

Поскольку операторы увеличения и уменьшения могут применяться только к переменным (локальным переменным или переменным класса) или элементам массива.Вы пытаетесь применить его к возвращаемому значению вызова функции - но у оператора нет возможности узнать, как записать новое значение обратно.

Вместо этого вам нужно получить значение, добавьте его ки установите значение с помощью соответствующего метода установки.

Для ясности, если вы пытаетесь увеличить x или y на экземпляре Point, вы можете сделать это с помощью ++:

thePoint.y++;

, но histogram.get(point.get(x).x).get(point.get(x).y)++; пытается сделать это с возвращаемым значением get.

...