当我运行它时显示此错误 线程" main"中的例外情况Abstract2.main上的java.lang.NullPointerException(Abstract2.java:70) 请告诉我如何解决它
我的代码在下面给出
import java.util.*;
abstract class plan
{
public double rate,bill;
public abstract void getrate();
public void cbill(int unit)
{
double bill=rate*unit;
System.out.println("bill is="+bill);
}
}
class domestic extends plan
{
public void getrate()
{
rate=2.5;
}
}
class commercial extends plan
{
public void getrate()
{
rate=5.5;
}
}
class industrial extends plan
{
public void getrate()
{
rate=7.5;
}
}
class bill
{
public plan getplan(String plantype)
{
if(plantype==("domestic"))
{
return new domestic();
}
if(plantype==("commercial"))
{
return new commercial();
}
if (plantype==("industrial"))
{
return new industrial();
}
return null;
}
}
class Abstract2
{
public static void main(String aa[])
{
plan p;//instance of class plan
String plantype;
int unit;
double rate;
bill b=new bill();
Scanner sc=new Scanner(System.in);
System.out.println("enter the plan type=");
System.out.println(" domestic");
System.out.println(" commercial");
System.out.println(" industrial");
plantype=sc.next();
System.out.println("enter the units");
unit=sc.nextInt();
p=b.getplan(plantype);
p.getrate();//line 70
p.cbill(unit);
}
}
请告诉我如何解决它
答案 0 :(得分:2)
您的代码存在问题:
getrate()
无效?得到什么呢?==
进行比较,应为equals
p=b.getplan(plantype);
您的getplan(plantype)
方法可能会返回null
。下一行(line 70
)您没有检查它(p
),只是p.getrate();
潜在的NPE。String plantype
未初始化。答案 1 :(得分:0)
将方法更改为
public plan getplan(String plantype)
{
if(plantype.equals("domestic"))
{
return new domestic();
}
if(plantype.equals("commercial"))
{
return new commercial();
}
if (plantype.equals("industrial"))
{
return new industrial();
}
return null;
}
}
答案 2 :(得分:0)
除了Kent所说的一切之外,你问题的直接答案是你从未初始化植物类型,只是声明它。 getplan()方法中的逻辑可以防止它获取值。因此,它没有具体的价值。
还有一些需要注意的事项: