Никаких изменений в исходном коде класса Point не требуется
public class Point {
private double x;
private double y;
public Point() {
this.x = 0.0;
this.y = 0.0;
}
public Point(double x, double y) {
this.x = x;
this.y = y;
}
public void setX(double x) {
this.x = x;
}
public void setY(double y) {
this.y = y;
}
public double getX() {
return this.x;
}
public double getY() {
return this.y;
}
public String toString() {
return "(" + this.x + ", " + this.y + ")";
}
public static void main(String[] args) {
Point p = new Point(1.5, 3);
System.out.println(p.toString());
}
}
Пожалуйста, измените свой код в классе Line следующим образом
public class Line {
private Point p1;
private Point p2;
public Line() {
p1 = new Point(0,0);
p2 = new Point(0,0);
}
public Line(double x1, double y1, double x2, double y2) {
p1 = new Point(x1, y1);
p2 = new Point(x2, y2);
}
public Line(Point p1, Point p2) {
this. p1 = new Point(p1.getX(), p1.getY());//add this.p1 instead of p1
this.p2 = new Point(p2.getX(), p2.getY());//add this.p2 intead of p2
}
public Point getP1() {
return this.p1;
}
public Point getP2() {
return this.p2;
}
public void setP1(double x, double y) {
this.p1 = new Point (x, y);
}
public void setP2(double x, double y) {
this.p2 = new Point(x, y);
}
public double getSlope() {
return ((p2.getY() - p1.getY()) / (p2.getX() - p1.getX()));
}
public static void main(String[] args) {
Point p1 = new Point(0, 3);
Point p2 = new Point(5, 5);
Line l = new Line(p1, p2);
System.out.println(l.getSlope()); //Threw an error at this point!!
}
}
Outout для заданных входов: 0,4
Объяснение: Вы пытаетесь назначить свои ссылочные переменные p1 и p2 (которые являются параметрами метода в перегруженной строке двух аргументов) конструктор) в переменные вашего экземпляра класса p1 и p2. Но в этом случае ваш метод также содержит те же параметры метода имени, что и переменные экземпляра в классе, поэтому в этом случае параметры вашего метода не будут назначены переменным экземпляра ваш класс. Объекты, которые генерируются после новой точки (p1.getX (), p1.getY ()) и новой точки (p2.getX (), p2.getY ()), будут снова назначены параметрам метода p1 и p2.
РЕШЕНИЕ 1: (что я и сделал в приведенном выше коде) Если вы используете одно и то же имя в переменных экземпляра и параметрах метода, используйте this ключевое слово я В случаях обращения с переменными экземпляра.
РЕШЕНИЕ 2: использует разные имена переменных для параметров метода и переменных экземпляра.