#java #variables #methods #return
#java #переменные #методы #Возврат
Вопрос:
Java
Я хочу получить доступ к ‘dist’ в моем другом классе. Однако я не могу этого сделать, поскольку переменная находится внутри метода. Я не могу изменить метод на ‘public double’, поэтому я не могу поместить его в get-метод. Советы?
public void paintComponent(Graphics g) {
super.paintComponent(g);
for (Circle circle : circles) {
circle.draw(g);
if (selectedCircle != null amp;amp; 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;
}
}
}
Комментарии:
1. Пожалуйста, не добавляйте изображения кода, добавьте в виде текста к вашему вопросу. Также пометьте свой вопрос языком
2. Если вам нужны расстояния между всеми возможными парами
circles
, вы можете сохранить их вList<Double>
ordouble[]
и поиграть сi, j
ними, чтобы определить индекс, иметь плоскую структуру данных и избегать таких вещей, какMap<Pair<Circle, Circle>, Double>
.3. @EdgarAsatryan Моя цель — просто использовать ‘dist’ в моем классе Circles. Там я добавил оператор if: if(dist < 10){ … Поэтому создание списка не должно быть необходимым. Я надеюсь, что это проясняет мой вопрос.
Ответ №1:
paintComponent
Метод обновит ваши круги, если они каким-то образом изменились. Это не место для внесения этих изменений самостоятельно. Поэтому код внутри второго цикла должен быть перемещен в другое место, например, в конструктор Circle
и / или в moveCircle
метод. paintComponent
будет вызван системой после внесения этих изменений. Кроме того, что касается первого цикла, неясно, что selectedCircle
это будет, вероятно, переменная экземпляра. Если это так, не рисуйте его внутри цикла, но только один раз.
Комментарии:
1. Спасибо, это несколько полезных советов!
Ответ №2:
Вы можете переместить 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 amp;amp; 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;
}
}
}