2013-12-05 2 views
2

Так что я пытаюсь написать код, который использует класс Point и Line в классе. Предполагаемая функция - создать линию с двумя точками, затем найти наклон линии. Это то, что код выглядитОшибка из-за частного доступа

public class LineMain{ 
    public static void main (String[]args){ 
    Point p1=new Point(22,3); 
    Point p2=new Point(4,7); 
    Line Line1=new Line(p1,p2); 
    System.out.println(Line1.getSlope()); 
    } 
} 

public class Line{ 
    private Point p1; 
    private Point p2; 

    public Line(Point p1, Point p2){ 
     this.p1=p1; 
     this.p2=p2; 
    } 

    public Point getP1(){ 
     return p1; 
    } 

    public Point getP2(){ 
     return p2; 
    }  
    public double getSlope(){ 
     int slope; 
     slope = ((p2.y-p1.y)/(p2.x-p1.x)); 
     return slope; 
    } 
} 

public class Point{ 
    private int x; 
    private int y; 
    /* 
    public Point(){ 
     this(0,0); 
    } 
    */ 
    public Point(){ 
     x=0; 
     y=0; 
    } 

    public Point(int x, int y){ 
     this.x=x; 
     this.y=y; 
    } 

    public Point(Point p){ 
     x=p.x; 
     y=p.y; 
    } 

    /* 
    public Point (int x1,int y1){ 
     x=x1; 
     y=y1; 
    } 
    */ 
    public int getX(){ 
     return x; 
    } 

    public int getY(){ 
     return y; 
    } 

    public void setX(int x){ 
     this.x=x; 
    } 

    public void setY(int y){ 
     this.y=y; 
    }    

    public String toString(){ 
     return "("+x+", "+y+")"; 
    } 

    public double distance(Point other){ 
     double x1=other.x; 
     double y1=other.y; 
     double z=Math.pow((x1-x),2)+Math.pow((y1-y),2); 
     return z; 
    } 

    public double slope(Point other){ 
     double x1=other.x; 
     double y1=other.y; 
     if (x1==x){ 
     throw new IllegalArgumentException("no"); 
     }else{ 
     double z=(y1-y)/(x1-x); 
     return z; 
     } 
     } 
}  

Но каждый раз, когда я пытаюсь запустить код всплывает с ошибкой:

Line.java:24: error: y has private access in Point 
     slope = ((p2.y-p1.y)/(p2.x-p1.x)); 
        ^
Line.java:24: error: y has private access in Point 
     slope = ((p2.y-p1.y)/(p2.x-p1.x)); 
         ^
Line.java:24: error: x has private access in Point 
     slope = ((p2.y-p1.y)/(p2.x-p1.x)); 
           ^
Line.java:24: error: x has private access in Point 
     slope = ((p2.y-p1.y)/(p2.x-p1.x)); 
            ^
4 errors 

Пожалуйста Помогите!

+2

И в чем ваш вопрос? Непонятно ли сообщение об ошибке? Это означает, что экземпляру 'Line' не разрешается обращаться к закрытым членам экземпляров« Point ». Частные члены не должны получать доступ к форме вне класса. Если вы не знакомы с настройками видимости участников, я предлагаю прочитать этот учебник: http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html. –

+0

Кажется, x & y являются частными членами класса Point. Загрузите определение класса Point – Ivan

ответ

4

У вас есть два варианта, хотя я действительно надеюсь, что вы выберете последний.

  1. Сделать поля Point общественностью. Это позволит вам использовать их, поскольку в настоящее время вы стоите за нарушение правил.

    public class Point { 
        public double x, y; // Possible 
        // constructor detail 
    } 
    
  2. Создать getX() и getY() для полей Point и держать их в качестве private. Вам придется переписать использование x и y, хотя, за счет сохранения соглашений.

    public class Point { 
        private double x, y; 
        // constructor detail 
    
        public double getX() { 
         return x; 
        } 
    
        public double getY() { 
         return y; 
        } 
    } 
    
0

Вам нужно добавить методы getX() и getY() к Point класса, а затем использовать их в Line классе.

Смежные вопросы