大致知道你要干什么拉
有几个地方要改
1 public class Donggandidai extends Huadan {
public Donggandidai(){
float ctf=0.6f
float dxf=0.1f
float shf=0.25f
tc="动感地带的资费是"
hf=ctf*ct+dxf*dx+shf*sh
}
}
还有2个类也这样改,就是都改到构造方法里面去!
2 public class Factory {
public Huadan fangfa4(int i){
Huadan a
if(i==1)
{
a=new Donggandidai()
}
if(i==2){
a=new Quanqiutong()
}
else{
a=new Shenzhouxing()
}
return a
}
}
多个判断用swith case,比较好,你这里上面消脊i==1 等于白判断了
switch (i){
case 1:a=new Donggandidai()break
case 2:a=new Quanqiutong()break
case 3:a=new Shenzhouxing()break
}
return a
再简单分析下拉
你Factory类的fangfa4方法返回一个Huadan类,你用创建它的子类返回这没有问题的,你在主方法中用一个Huadan来指向这个子类也没有问题,这相当于用一个父类的变量指向一个子类的对象,也就是多态!但是这个时候你是不能再调用子类的独空仿有而父类没有的方法,而且你没有定义子类的构造方法,所以父类的2个成员变量hf和tc没有赋你想赋的值,都只有它们的默认值null和0.0,所以你打印出来的是null0.0,而且你Factory中的fangfa4方法中的判拿亏渗断也不对,如果判断比较多,建议用switch case
#include"math.h"拆搭main()
{
float p,d,f
printf("please inout consumption\袜御老n")
scanf("%f",&p)
if(p<100)
{m==0
f=p}
else if(p>告升=100&&p<200)
{m==o.o5
f=(1-0.05)*p}
else if(p>=200&&p<500)
{m==0.1
f=(1-0.1)*p}
else if(p>=500&&p<1000)
{m==0.15
f=(1-0.15)*p}
else(p>=1000)
{m==o.2
f=(1-0.2)*p}
printf("discount is %f,amount is %f",m,f)
}
试试看!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)