Переменная непоследовательности метода рисования Java Awt - PullRequest
1 голос
/ 17 октября 2010

Я не уверен, что не так, но в Paint () происходит странное событие, связанное с некоторыми переменными.

этот код работает просто отлично:

public void paint(Graphics g)
{
    Point[] positions = {new Point(20,50),new Point(60,30),new Point(80,20),new Point(80,30)};
}

но этотне, я хотел этого, потому что я меняю расположение позиций на выбор пользователя:

// declared somewhere
Point[] selectedFormation = {new Point(20,50),new Point(60,30),new Point(80,20),new Point(80,30)};

public void paint(Graphics g)
{
    Point[] positions = selectedFormation;
}

1 Ответ

2 голосов
/ 17 октября 2010

когда вы делаете positions = selectedFormation, вы не создаете копию selectedFormation, вы просто сохраняете ссылку на нее в позицию. Оба указывают на один и тот же объект (один и тот же массив). Если массив изменяется с помощью position, это тот же массив, что и selectedFormation.
Используйте clone() для создания копии массива:

public void paint(Graphics g)
{
    Point[] positions = selectedFormation.clone();
}

но учтите, что clone не копирует элементы массива, оба списка будут содержать одинаковые экземпляры. Если вы измените только координаты любой точки, это повлияет на оба списка. В этом случае вам необходимо сделать полную копию списка:

public Point[] deepCopy(Point[] array) {
    Point[] copy = new Point[array.length];
    for (int i = 0; i < array.length; i++) {
        copy[i] = new Point(array[i]);
    }
    return copy;
}

может использовать для этого обобщение ... но давайте сделаем это просто

...