大家幫忙看看,為什么變量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
?
2018-01-08
好恐怖? 那么長的一串代碼
2017-12-29
。。。
2017-12-29
找到問題了,是Truck類中的Heavy與Light實例化的位置調換了。
2017-12-29
其運行結果如右圖,light的輸出值為null