Как добавить оператор возврата? - PullRequest
0 голосов
/ 14 апреля 2019

Java

Я хочу получить доступ к 'dist' в моем другом классе.Однако я не могу этого сделать, поскольку переменная находится внутри метода.Я не могу изменить метод на public double, поэтому я не могу поместить его в метод get.Советы?

public void paintComponent(Graphics g) {
    super.paintComponent(g);

    for (Circle circle : circles) {
        circle.draw(g);
        if (selectedCircle != null && selectedCircle == circle) {
            selectedCircle.drawSelected(g);
        }
    }

    for (int i = 0; i < circles.size(); i++) {
        Circle c1 = circles.get(i);
        for (int j = i + 1; j < circles.size(); j++) {
            Circle c2 = circles.get(j);

            double dist = c1.getPoint().distance(c2.getPoint()) + 1;
            double dx = (c2.x - c1.x) / dist / dist;
            double dy = (c2.y - c1.y) / dist / dist;
            c1.x += dx;
            c1.y += dy;
            c2.x -= dx;
            c2.y -= dy;

        }
    }

}

Ответы [ 2 ]

0 голосов
/ 14 апреля 2019

Вы можете переместить объявление dist за пределы вашего метода и в тело класса, а затем предоставить метод получения доступа для вашего другого класса.

private double dist;

public double getDist() {
   return dist;
}

public void paintComponent(Graphics g) {
    super.paintComponent(g);

    for (Circle circle : circles) {
        circle.draw(g);
        if (selectedCircle != null && selectedCircle == circle) {
            selectedCircle.drawSelected(g);
        }
    }

    for (int i = 0; i < circles.size(); i++) {
        Circle c1 = circles.get(i);
        for (int j = i + 1; j < circles.size(); j++) {
            Circle c2 = circles.get(j);

            dist = c1.getPoint().distance(c2.getPoint()) + 1;
            double dx = (c2.x - c1.x) / dist / dist;
            double dy = (c2.y - c1.y) / dist / dist;
            c1.x += dx;
            c1.y += dy;
            c2.x -= dx;
            c2.y -= dy;

        }
    }

}
0 голосов
/ 14 апреля 2019

Метод paintComponent обновит ваши круги, если они как-то изменились.Это не то место, где можно сделать эти изменения самостоятельно.Поэтому код внутри второго цикла должен быть перемещен в другое место, например, в конструктор Circle и / или в метод moveCircle.paintComponent будет вызываться системой после внесения этих изменений.Кроме того, что касается первого цикла, неясно, что будет selectedCircle, вероятно, переменная экземпляра.Если это так, не закрашивайте его внутри цикла, а только один раз.

...