0

There is an interface

public interface Rtriangle {
    int getApexX1();
    int getApexY1();
    int getApexX2();
    int getApexY2();
    int getApexX3();
    int getApexY3();
}

And a class that implement this interface

public class RightTriangle implements Rtriangle{
    private Point a;
    private Point b; 
    private Point c;

    public RightTriangle (int x1, int y1, int x2, int y2, int x3, int y3){
        this.a.x=x1;
        this.a.y=y1;
        this.b.x=x1;
        this.b.y=y1;
        this.c.x=x1;
        this.c.y=y1;
} 

    public int getApexX1(){
        return a.x;
        }
    public int getApexY1(){
        return a.y;
    }
    public int getApexX2() {
        return b.x;
    }
    public int getApexY2(){
        return b.y;
    }
    public int getApexX3(){
        return c.x;
    }
    public int getApexY3(){
        return c.y;
    }
}

Also there is a class that uses this class:

public class RtriangleProvider {
    public static Rtriangle getRtriangle(){
        try{
            Rtriangle tr = new RightTriangle(0, 0, 0, 2, 2, 0);
            return tr;
        }
        catch(Exception e){
            System.out.print(e.toString());
            return null;
        }
    }
}

And when I try to use getRtriangle() method I'm getting NullPointerException exception on this line:

 Rtriangle tr = new RightTriangle(0, 0, 0, 2, 2, 0);

on RightTriangle creation.

public class TestTriangle {
    @Test
    public void testRight(){
        Rtriangle tr =RtriangleProvider.getRtriangle();
    }
}

I can't understand what is the problem with constructor.I will appreciate any advice.

3 Answers 3

8

Look at this part:

private Point a;
...

public RightTriangle (int x1, int y1, int x2, int y2, int x3, int y3){
    this.a.x=x1; 
    ...
}

What do you expect the value of a to be here? It hasn't been set by anything else, so it will be null. Dereferencing it then causes the exception. I suspect you want:

public RightTriangle (int x1, int y1, int x2, int y2, int x3, int y3){
    a = new Point(x1, y1);
    b = new Point(x2, y2);
    c = new Point(x3, y3);
}

Also note that this code uses all 6 parameters, whereas your original code only uses x1 and y1.

I'd also encourage you to think more in terms of points - I would rewrite both the interface and constructor to use Point values rather than the individual x and y values.

Sign up to request clarification or add additional context in comments.

Comments

0

You never instantiate the Points being used in RightTriangle.

You have neither provided what a Point actually is, but you surely need to use in RightTriangles constructor at the very start:

this.a = new Point();
this.b = new Point();
this.c = new Point();

Comments

0

In the lines this.a.x=x1; and so forth in your RightTriangle constructor, you are accessing your Point instance fields' public fields without initializing the Point fields themselves first.

Hence the NPE.

Try something along the lines of:

this.a = new Point(); // or whatever is the signature of the Point constructor
this.a.x=x1;
// and so forth

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.