使用对象时的java.lang.nullPonterException';s法
嗨,我有一个叫做矩形的对象,下面是代码:使用对象时的java.lang.nullPonterException';s法,java,arrays,object,parameters,nullpointerexception,Java,Arrays,Object,Parameters,Nullpointerexception,嗨,我有一个叫做矩形的对象,下面是代码: class Rectangle{ private double length, breath, area, perimeter; private static double largestArea; public void setSideDetails(double length, double breath){ this.length = length; this.breath = breath;
class Rectangle{
private double length, breath, area, perimeter;
private static double largestArea;
public void setSideDetails(double length, double breath){
this.length = length;
this.breath = breath;
}
public double getArea(){
area = length*breath;
return area;
}
public double getPerimeter(){
perimeter = 2*(length+breath);
return perimeter;
}
public static void setLargestArea(double areas[]){
for(int i = 0; i < areas.length; i++){
if(areas[i] > largestArea){
largestArea = areas[i];
}
}
}
public static double getLargestArea(){
return largestArea;
}
public void drawRectangle(){
System.out.print(" ");
for(int i = 0; i < length; i++){
System.out.print("_");
}
System.out.println();
for(int i = 0; i < breath; i++){
System.out.print("|");
for(int j = 0; j < length; j++){
System.out.print(" ");
}
System.out.println("|");
}
System.out.print(" ");
for(int i = 0; i < length; i++){
System.out.print("¯");
}
System.out.println();
}
}
类矩形{
私人双倍长度、呼吸、面积、周长;
私有静态双大面积;
公共空间细节(双倍长度,双呼吸){
这个长度=长度;
这个呼吸=呼吸;
}
公共区域(){
面积=长度*呼吸;
返回区;
}
公共双边界{
周长=2*(长度+呼吸);
返回周长;
}
公共静态空隙集总面积(双面积[]){
对于(int i=0;i大面积){
大面积=面积[i];
}
}
}
公共静态双getlargestrea(){
回归大面积;
}
公共空矩形(){
系统输出打印(“”);
for(int i=0;i
以及使用它的类:
import java.util.*;
class UsingRectangle{
public static void main(String args[]){
Scanner in = new Scanner(System.in);
in.useDelimiter("\n");
int number = 0;
boolean isError = false;
String units;
System.out.print("How many rectangles do you want to create? ");
do{
try{
number = in.nextInt();
number = Math.abs(number);
isError = false;
}catch(InputMismatchException e){
System.out.println("Your input was not accepted. Please try again.");
in.next();
isError = true;
}
}while(isError);
do{
isError = false;
System.out.print("Please enter the units in mm, cm or m: ");
units = in.next();
if(!(units.equalsIgnoreCase("mm"))&&!(units.equalsIgnoreCase("cm"))&&!(units.equalsIgnoreCase("m"))){
System.out.println("Your input was not accepted. Please try again.");
isError = true;
}
}while(isError);
Rectangle[] r = new Rectangle[number]; //The actual rectangles are instanceiated here.
double areas[] = new double[number]; //This will be used to collect the areas to be sent to a static method.
for(int i = 0; i < r.length; i++){
double length = 0;
double breath = 0;
do{
isError = false;
try{
System.out.print("Please enter the length of Rectangle "+(i+1)+": ");
length = Math.abs(in.nextInt());
}catch(InputMismatchException e){
System.out.println("Your input was not accepted. Please try again.");
in.next();
isError = true;
}
}while(isError);
do{
isError = false;
try{
System.out.print("Please enter the breath of Rectangle "+(i+1)+" ");
breath = Math.abs(in.nextInt());
}catch(InputMismatchException e){
System.out.println("Your input was not accepted. Please try again.");
in.next();
isError = true;
}
}while(isError);
r[i].setSideDetails(length, breath);
}
for(int i = 0; i < r.length; i++){
r[i].drawRectangle();
areas[i] = r[i].getArea();
System.out.println("Area: "+areas[i]+units+"2 Perimeter: "+r[i].getPerimeter()+units);
}
System.out.print("The largest area is: ");
Rectangle.setLargestArea(areas);
System.out.print(Rectangle.getLargestArea());
}
}
import java.util.*;
类使用矩形{
公共静态void main(字符串参数[]){
扫描仪输入=新扫描仪(系统输入);
in.useDelimiter(“\n”);
整数=0;
布尔isError=false;
弦单位;
System.out.print(“要创建多少个矩形?”);
做{
试一试{
number=in.nextInt();
数字=数学abs(数字);
isError=错误;
}捕获(输入不匹配异常e){
System.out.println(“您的输入未被接受,请重试”);
in.next();
isError=真;
}
}while(isError);
做{
isError=错误;
系统输出打印(“请输入单位mm、cm或m:”;
单位=in.next();
if(!(单位等信号量(“mm”)和&!(单位等信号量(“cm”)和&!(单位等信号量(“m”)){
System.out.println(“您的输入未被接受,请重试”);
isError=真;
}
}while(isError);
矩形[]r=新矩形[number];//实际矩形在此处实例化。
double area[]=new double[number];//这将用于收集要发送到静态方法的区域。
对于(int i=0;i
我的问题是:
其中表示r[i].setSideDetails(长度、呼吸)代码>出现运行时错误-java.lang.nullPointerException null
。我不知道是什么原因造成的。任何搜索都没有结果,我想知道原因、结果和预防,以及如何解决它
谢谢
顺便说一句,我是两年后参加考试的A级学生,所以如果我是专业人士,不要表现得好像我应该知道这些。那是因为你刚刚声明了Rectangle[]r=new Rectangle[number]代码>并且尚未初始化此数组中的元素。默认情况下,数组中的每个元素都是null
,在尝试对其调用方法时提供NPE。在对数组中的每个元素调用方法之前对其进行初始化
例如:
Rectangle[]r=新矩形[number];
对于(int i=0;i
这是因为您刚刚声明了矩形[]r=new Rectangle[number]代码>并且尚未初始化此数组中的元素。默认情况下,数组中的每个元素都是null
,在尝试对其调用方法时提供NPE。在对数组中的每个元素调用方法之前对其进行初始化
例如:
Rectangle[]r=新矩形[number];
对于(int i=0;i
由于引用r[i]
指向nothing/null
,您将获得一个NullPointerException。因此,您必须实例化矩形
对象并将
Rectangle[] r = new Rectangle[number];
for(int i = 0; i < r.length; i++){
r[i] = new Rectangle(); // You can use either this or some other constructor you have.
}
for(int i = 0; i < r.length; i++)
r[i] = new Rectangle(); // creating a new Rectangle object here