0

每当我运行它时,我都会收到一条错误消息,提示 java.lang.NullPointerException: null from a code。

这是代码:

public class APRectangle
{
    private APPoint myTopLeft;
    private APPoint myTopRight;
    private APPoint myBottomLeft;
    private APPoint myBottomRight;
    private double  myWidth;
    private double  myHeight;

    public APRectangle( APPoint topLeft, double width, double height )
    {
        myTopLeft = topLeft;
        myWidth = width;
        myHeight = height;
    }

    public APPoint getTopLeft()
    {
        return myTopLeft;
    }

    public void setTopLeft( APPoint TL )
    {
        myTopLeft = TL;
    }

    public double getWidth()
    {
        return myWidth;
    }

    public void setWidth( double W )
    {
        myWidth = W;
    }

    public double getHeight()
    {
        return myHeight;
    }

    public void setHeight( double H )
    {
        myHeight = H;
    }

    public APPoint getTopRight()
    {
        return new APPoint( myTopLeft.getX() + myWidth, myTopLeft.getY() );
    }

    public APPoint getBottomLeft()
    {
        return new APPoint( myTopLeft.getX(), myTopLeft.getY() - myHeight );
    }

    public APPoint getBottomRight()
    {
        return new APPoint( myTopRight.getX(), myTopRight.getY() - myHeight );
    }
}

最后一种方法是给我错误的方法。

这是我的主要课程:

public class MainClass
{
 public MainClass()
 {
    }

 public static String printAPPoint( APPoint p )
 {
     return "(" + p.getX() + "," + p.getY() + ")";
    }

 public static String printAPRectangle( APRectangle R)
 {
     return "[APRectangle " + printAPPoint(R.getTopLeft()) +
            " " + R.getWidth() + "," + R.getHeight() + "]" ;
 }

  public static String printTopLeft( APRectangle R )
 {
     return "(Top Left is " + printAPPoint(R.getTopLeft()) + ")" ;
    }

 public static String printTopRight( APRectangle R )
 {
     return "(Top Right is " + printAPPoint(R.getTopRight()) + ")" ;
    }

public static String printBottomLeft( APRectangle R )
{
    return "(Bottom Left is " + printAPPoint(R.getBottomLeft()) + ")";
}

public static String printBottomRight( APRectangle R )
{
    return "(Bottom Right is " + printAPPoint(R.getBottomRight()) + ")";
}

 public static void main(String[] args)
 {
     APPoint p = new APPoint(1.0, 5.0 );
     APRectangle R = new APRectangle( p, 5.0, 3.0);
     System.out.println(printAPRectangle(R));
     System.out.println(printTopLeft(R));
     System.out.println(printTopRight(R));
     System.out.println(printBottomLeft(R));
     System.out.println(printBottomRight(R));
     System.out.println( "Done!" );
  }

}

最后一种方法之前的三种方法效果很好,但我不知道为什么最后一种方法不起作用。有人能帮助我吗?

谢谢,罗汉

4

5 回答 5

2

您忘记初始化myTopRightmyBottomLeftmyBottomRight。其他方法可以正常工作,因为您不使用它们的实际点(但您可能应该)。AP计算机科学?

顺便说一句,您的异常消息是这样说的:我们有问题,因为我们的对象之一不存在。我们在尝试 APRectangle.getBottomRight(第 59 行)时发现了问题。我们正在做 APRectangle.getBottomRight 因为 MainClass.printBottomRight(第 35 行)告诉我们这样做。我们正在做 MainClass.printBottomRight 因为 MainClass.main(第 46 行)告诉我们这样做。希望这可以解决问题。

于 2012-07-23T03:20:43.547 回答
1

您永远不会在构造函数中初始化 myTopRight、myBottomLeft 或 myBottomRight。

于 2012-07-23T03:15:19.770 回答
1

您尚未初始化/实例化 some字段。fields在使用它们之前,您应该始终进行初始化。

像这样的东西:

public APRectangle( APPoint topLeft, double width, double height )
    {
         myTopLeft=topLeft;
         myTopRight=new APPoint(0,0);
         myBottomLeft=new APPoint(0,0);
         myBottomRight=new APPoint(0,0);
         myWidth=width;
         myHeight=height;
    }
于 2012-07-23T03:15:56.000 回答
1

NullPointerException 意味着您有一个空值被取消引用。例如,如果您在以下代码行中遇到该异常:

 foo.doSomething();

那将意味着foo == null

你可以:

  1. 连接一个调试器并在抛出异常之前放置一个断点以检查状态,或者......
  2. 在相关的代码中添加一些 println

其中任何一个都可以帮助您确定哪个变量为空。

于 2012-07-23T03:18:08.030 回答
0

检查 myTopRight 变量。你的异常可能会导致这个值为null。调试一下吧。

于 2012-07-23T03:34:48.013 回答