java赋值的一部分我要求我使用set方法将详细信息输入到数组中。到目前为止,我有以下方法来设置细节
public void setCanopy(String uniqueRef, String modelName, int width, int height, int depth, int crewToBuild, double timeToBuild, double trailerLength, String available)
{
this.uniqueRef = uniqueRef;
this.modelName = modelName;
this.width = width;
this.height = height;
this.depth = depth;
this.timeToBuild = timeToBuild;
this.available = available;
this.crewToBuild = crewToBuild;
this.trailerLength = trailerLength;
}
这个方法可以正常工作,只要它只用于向构造函数输入细节,但是当我尝试将它与数组一起使用时,我得到一个NullPointerException。
我还必须稍后使用get方法显示这些细节。我正在使用以下方法来显示这些,但是,只有在我使用构造函数时它才有效。
public static void displayCanopyDetails(Canopy c)
{
System.out.println("Canopy reference number: " + c.getUniqueRef() + "\nCanopy model name: " + c.getModelName() +
"\nCanopy Dimensions (cm) - Width: " + c.getWidth() + " Height: " + c.getHeight() + " Depth: " + c.getDepth() +
"\nCrew to build: " + c.getCrewToBuild() + "\nTime to build canopy (minutes): " + c.getTimeToBuild() +
"\nTrailer Length: " + c.getTrailerLength() + "\nAvailability: " + c.getAvailable());
}
任何帮助这些使用数组的帮助将不胜感激。感谢。
在我的主要方法中我有
tentDetails(c[0]);
调用方法
public static void tentDetails(Canopy c1,)
{
c1.setCanopy("CAN123", "Model1", 500, 200, 500, 5, 15, 10, "Available");
}
尝试运行此方法时发生NullPointerException错误。
答案 0 :(得分:1)
声明数组时,它会为对象创建一个空的“包”,但它不会自己创建对象。当您在此数组中的对象上使用方法时,您将获得NullPointerException,因为该对象为null。在首先创建对象之前,您无法在对象上执行方法。例如:
Canopy[] canopy=new Canopy[5]; //Creates a 'storage' for 5 Canopy objects
System.out.println(Canopy[0]); //Prints null and throws NPE if you execute method
Canopy[0]=new Canopy(); //Create new Canopy object and insert it in the array
System.out.println(Canopy[0]); //Not null anymore - you can execute methods
Canopy[0].setCanopy("CAN123", "Model1", 500, 200, 500, 5, 15, 10, "Available"); // works fine
答案 1 :(得分:1)
在Java中,规则是当您创建数组时,其元素将接收默认值。 Object的默认值为null,因此最初数组中的每个元素都为null。您必须显式实例化Canopy对象,如下所示:
for (int i = 0; i < c.length; i++) {
c[i] = new Canopy();
}
在此之后,您可以安全地在数组的每个元素上调用tentDetails()方法。