看了下拉
大致知道你要干什么拉
有几个地方要改
1 public class Donggandidai extends Huadan {
public Donggandidai(){
float ctf=06f;
float dxf=01f;
float shf=025f;
tc="动感地带的资费是";
hf=ctfct+dxfdx+shfsh;
}
}
还有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和00,所以你打印出来的是null00,而且你Factory中的fangfa4方法中的判断也不对,如果判断比较多,建议用switch case
经常在写程序的时候遇到类似的警告:
warning C4305: '=' : truncation from 'const double
warning C4305: 'argument' : truncation from 'const double' to 'float'等等;
原因:
在 C 语言中,如果不指定数据类型,那么小数常量会被认为是 double 类型的。
因此在你的初始化中
x = 12;
这一句,x 是 float 类型的,但是 12 是 double 类型的,由于它是常量,所以编译器称为 const double。double 是不能隐式转换为 float 的。
C语言中的确有此介绍改成x=12f,y=24f,z=-36f就可以了证明详见谭浩强<<C语言程序第二版>>47页。
#include"mathh"
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==oo5;
f=(1-005)p;}
else if(p>=200&&p<500)
{m==01;
f=(1-01)p;}
else if(p>=500&&p<1000)
{m==015;
f=(1-015)p;}
else(p>=1000)
{m==o2;
f=(1-02)p;}
printf("discount is %f,amount is %f",m,f);
}
试试看!
#include<stdioh>
#include<stdlibh>
#include<iostreamh>
typedef struct data
{
float x;
float y;
}Data;//变量x和函数值y的结构
Data d[20];//最多二十组数据
float f(int s,int t)//牛顿插值法,用以返回插商
{
if(t==s+1)
return (d[t]y-d[s]y)/(d[t]x-d[s]x);
else
return (f(s+1,t)-f(s,t-1))/(d[t]x-d[s]x);
}
float Newton(float x,int count)
{
int n;
while(1)
{
cout<<"请输入n值(即n次插值):";//获得插值次数
cin>>n;
if(n<=count-1)// 插值次数不得大于count-1次
break;
else
system("cls");
}
//初始化t,y,yt。
float t=10;
float y=d[0]y;
float yt=00;
//计算y值
for(int j=1;j<=n;j++)
{
t=(x-d[j-1]x)t;
yt=f(0,j)t;
//cout<<f(0,j)<<endl;
y=y+yt;
}
return y;
}
float lagrange(float x,int count)
{
float y=00;
for(int k=0;k<count;k++)//这儿默认为count-1次插值
{
float p=10;//初始化p
for(int j=0;j<count;j++)
{//计算p的值
if(k==j)continue;//判断是否为同一个数
p=p(x-d[j]x)/(d[k]x-d[j]x);
}
y=y+pd[k]y;//求和
}
return y;//返回y的值
}
void main()
{
float x,y;
int count;
while(1)
{
cout<<"请输入x[i],y[i]的组数,不得超过20组:";//要求用户输入数据组数
cin>>count;
if(count<=20)
break;//检查输入的是否合法
system("cls");
}
//获得各组数据
for(int i=0;i<count;i++)
{
cout<<"请输入第"<<i+1<<"组x的值:";
cin>>d[i]x;
cout<<"请输入第"<<i+1<<"组y的值:";
cin>>d[i]y;
system("cls");
}
cout<<"请输入x的值:";//获得变量x的值
cin>>x;
while(1)
{
int choice=3;
cout<<"请您选择使用哪种插值法计算:"<<endl;
cout<<" (0):退出"<<endl;
cout<<" (1):Lagrange"<<endl;
cout<<" (2):Newton"<<endl;
cout<<"输入你的选择:";
cin>>choice;//取得用户的选择项
if(choice==2)
{
cout<<"你选择了牛顿插值计算方法,其结果为:";
y=Newton(x,count);break;//调用相应的处理函数
}
if(choice==1)
{
cout<<"你选择了拉格朗日插值计算方法,其结果为:";
y=lagrange(x,count);break;//调用相应的处理函数
}
if(choice==0)
break;
system("cls");
cout<<"输入错误!!!!"<<endl;
}
cout<<x<<" , "<<y<<endl;//输出最终结果
}
#include<stdioh>
it main()
{int a,b;
scanf("%d%d",&a,&b);
printf("%d+%d=%d\n",a+b);
printf("%d-%d=%d\n",a-b);
printf("%d%d=%d\n",ab);
printf("%d/%d=%2f\n",(float)a/b);
return 0;
}
以上就是关于java的一个小程序,帮我看看哪不对全部的内容,包括:java的一个小程序,帮我看看哪不对、一个非常简单的C语言小程序,但就是找不出小错误在哪、麻烦大家给我看看我这个小程序,我资质不够,还发现不了其中的错误!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)