大家幫忙看看,為什么變量light賦值失敗,輸出結果為null?
//這是父類貨車的代碼
public?class?Truck?{
?static?Float?cargoCa;?????//創建貨車的載貨量
?static?int?capacity=4;????//創建貨車的載客量
?static?int?rent;?????//創建貨車的日租金
?int?smallType;?????//用來接收局部變量smalltype的值
?Scanner?input=new?Scanner(System.in);
?void?getType()?{
??System.out.println("請輸入您要選擇的貨車類型:");
?????System.out.println("1、輕型貨車(可核載5噸)??????????2、重型貨車(可核載20噸)");
?????int?smalltype=input.nextInt();
?????smallType=smalltype;
?????while(smalltype*0==0)?{
???????if(smalltype==1)?{???//這部分重型貨車的繼承代碼沒有貼上
????????Heavy?heavy=new?Heavy();
????????heavy.getBrand();
????????break;
???????}else?if(smalltype==2)?{
????????Light?light=new?Light();
????????light.getBrand();
????????break;
???????}else?{
????????System.out.println("您的輸入有誤!請輸入您要選擇的貨車類型:");
????????System.out.println("1、輕型貨車(可核載5噸)??????????2、重型貨車(可核載20噸)");
????????smalltype=input.nextInt();
???????}
?????}
?}
?
//show()方法調用兩個輕貨和重貨子類的showFinal()方法展示租車清單
?void?show()?{?????
??if(smallType==1)?{
??????Light?light=new?Light();
??????light.showFinal();
??}else?if(smallType==2)?{
???Heavy?heavy=new?Heavy();
???heavy.showFinal();
??}
?}
}
??
??//這是子類Light繼承父類Truck的代碼
??public?class?Light?extends?Truck?{
?static?String?name="輕型貨車";
?
?//【注意,創建light字符串,用來接收局部變量中的品牌名稱】
?static?String?light;
?Scanner?input=new?Scanner(System.in);
?void?getBrand()?{
??String?light1="日產";
??String?light2="雪鐵龍";
??String?light3="標致";
??Light.cargoCa=5f;
??System.out.println("請輸入您要選擇的輕型貨車品牌:");
?????System.out.println("1、"+light1+"(1200元/天)??????????"+"2、"+light2+"(1500元/天)??????????"+"3、"+light3+"(1800元/天)");
?????int?lBrand=input.nextInt();
?????while(lBrand*0==0)?{
??????if(lBrand==1)?{
???????Light.rent=1200;
???????light=light1;
???????break;
??????}else?if(lBrand==2)?{
???????Sedan.rent=1500;
???????light=light2;
???????break;
??????}else?if(lBrand==3)?{
???????Sedan.rent=1800;
???????light=light3;
???????break;
??????}else?{
???????System.out.println("您的輸入有誤!請輸入您要選擇的輕型貨車品牌:");
???????System.out.println(light1+"(1200元/天)??????????"+light2+"(1500元/天)??????????"+light3+"(1800元/天)");
???????lBrand=input.nextInt();
??????}
?????}
?}
?
//子類Light用來展示租車清單的showFinal()方法
?void?showFinal()?{
??System.out.println("請輸入您要租車的數量:");
?????int?amt=input.nextInt();
??System.out.println("請輸入您要租車的天數:");
?????int?days=input.nextInt();
?????int?price=Light.rent*amt*days;
?????
?????//【注意,就是這里的變量light,在InitialCRS類里面的最后輸出結果為null】
?????System.out.println("車型:"+light+name);
?????System.out.println("總載人量:"+Truck.capacity*amt+"??????????總載貨量:"+Light.cargoCa*amt+"噸");
?????System.out.println("總計:"+price+"元");
?}
}
?//這是執行類InitialCRS的代碼????????
?public?class?InitialCRS?{
?public?static?void?main(String[]?args)?{
??//?TODO?Auto-generated?method?stub
??Scanner?input=new?Scanner(System.in);
??System.out.println("請問您是否要租車?");
??System.out.println("1、是??????????2、否");
??int?confirm=input.nextInt();
??while(confirm*0==0)?{
??????if(confirm==2)?{
???????System.out.println("答答租車系統已退出,感謝您的使用!");
???????break;
??????}else?if(confirm==1)?{
????System.out.println("請選擇您要租賃的車輛類型:");
???????System.out.println("1、汽車??????????2、貨車??????????3、皮卡");
???????int?type=input.nextInt();
???????while(type*0==0)?{
????????????if(type==1)?{???//Car父類部分的代碼沒有貼出
????????????Car?car=new?Car();
????????????car.getType();
????????????car.show();
????????????break;
????????????}else?if(type==2)?{???//本次問題中的Truck類的方法調用
???????Truck?truck=new?Truck();
???????truck.getType();
???????truck.show();
???????break;
?????????????}else?if(type==3)?{???//pickup部分的代碼沒有貼出
????????Pickup?pickup=new?Pickup();
????????pickup.getBrand();
????????pickup.show();
????????break;
??????????????}else?{
????????????System.out.println("您的輸入有誤!請選擇您要租賃的車輛類型:");
????????????System.out.println("1、汽車??????????2、貨車??????????3、皮卡");
????????????type=input.nextInt();
????????????}
???????}
???????break;
??????}else?{
???????System.out.println("您的輸入有誤!請問您是否要租車?");
???????System.out.println("1、是??????????2、否");
???????confirm=input.nextInt();
???????}
?????}
??input.close();
?}
}
//在這里多說一句,我在其它子類里邊,以一模一樣的方式創建了類似于light的用來接收品牌的字符串,其最后的輸出結果都是正常的,只有這個字符串light不知道怎么回事輸出結果竟然是null?
2017-12-29
找到問題了,是Truck類中的Heavy與Light實例化的位置調換了。
2017-12-29
其運行結果如下圖,light的輸出值為null