父類Car
package?com.imooc;
public?abstract?class?Car?{
????//定義全局變量,+m用于區分參數
????public?String?mName;
????public?int?mMoney;
????public?int?mPeopleNum;
????public?int?mThingNum;
????//定義抽象方法用于創建租車類型與價目表
????public?abstract?void?show();
}
子類——載人車類
package?com.imooc;
public?class?People?extends?Car?{
????//?定義構造方法,用于保存傳遞進來的name,money,peopleNum;
????public?People(String?name,?int?money,?int?peopleNum)?{
????????this.mName?=?name;//?將傳遞進來的name參數保存在當前對象中的mName屬性中,nName是繼承父類Car所得到的,下同
????????this.mMoney?=?money;
????????this.mPeopleNum?=?peopleNum;
????}
????public?void?show()?{
????????//?TODO?Auto-generated?method?stub
????????System.out.println(mName?+?"\t\t"?+?mMoney?+?"天/元\t\t"?+?mPeopleNum
????????????????+?"人");//?"\t"為制表符,為了讓格式更好看
????}
}
子類——載物車類
package?com.imooc;
public?class?Thing?extends?Car?{
????public?Thing(String?name,?int?money,?int?thingNum)?{
????????this.mName?=?name;//?將傳遞進來的name參數保存在當前對象中的mName屬性中,nName是繼承父類Car所得到的,下同
????????this.mMoney?=?money;
????????this.mThingNum?=?thingNum;
????}
????public?void?show()?{
????????//?TODO?Auto-generated?method?stub
????????System.out.println(mName?+?"\t\t"?+?mMoney?+?"天/元\t\t"?+?mThingNum
????????????????+?"噸");//?"\t"為制表符,為了讓格式更好看
????}
}
子類——皮卡類
package?com.imooc;
public?class?PeopleAndThing?extends?Car?{
????public?PeopleAndThing(String?name,?int?money,?int?peopleNum,?int?thingNum)?{
????????this.mName?=?name;//?將傳遞進來的name參數保存在當前對象中的mName屬性中,nName是繼承父類Car所得到的,下同
????????this.mMoney?=?money;
????????this.mPeopleNum?=?peopleNum;
????????this.mThingNum?=?thingNum;
????}
????public?void?show()?{
????????//?TODO?Auto-generated?method?stub
????????System.out.println(mName?+?"\t\t"?+?mMoney?+?"天/元\t\t"?+?mPeopleNum
????????????????+?"人,"?+?mThingNum?+?"噸");//?"\t"為制表符,為了讓格式更好看
????}
}
函數主入口
package?com.imooc;
import?java.util.Scanner;//導入工具類Scanner用于輸入數據
public?class?Main?{
????public?static?void?main(String[]?args)?{
????????Car[]?cars?=?{?new?People("奧迪A4",?500,?4),?new?People("馬自達",?400,?4),
????????????????new?PeopleAndThing("皮卡雪6",?450,?4,?2),
????????????????new?People("金龍",?800,?20),?new?Thing("松花江",?400,?4),
????????????????new?Thing("依維柯",?1000,?20)?};//?用多態的方式初始化對象,并將對象保存在數組cars里
????????????????????????????????????????????????//?new+構造方法(參數)?=?對象
????????System.out.println("歡迎使用答答租車系統!您是否要租車:");
????????System.out.println("Y?是/?N?否");
????????Scanner?scanner?=?new?Scanner(System.in);?//?創建Scanner對象
????????????????????????????????????????????????????//?,并將地址傳給引用類型變量scanner
????????String?input?=?scanner.next();?//?將輸入的值傳給新定義的String類型的input
????????/**
?????????*?判斷輸入的值,如果是其他數則一直循環,是Y跳出循環,輸入N結束程序
?????????*/
????????while?(true)?{
????????????if?(input.equals("Y")?||?input.equals("y"))?{
????????????????System.out.println("序號\t\t汽車名稱\t\t租金\t\t容量");
????????????????for?(int?i?=?0;?i?<?cars.length;?i++)?{//?通過遍歷cars數組來訪問對象
????????????????????System.out.print(i?+?1?+?"\t\t");//?創建序號,注意用print而不是println
????????????????????cars[i].show();//?調用各個對象的show()方法以顯示菜單
????????????????}
????????????????break;
????????????}?else?if?(input.equals("N")?||?input.equals("n"))?{
????????????????System.out.println("歡迎下次光臨!");
????????????????System.exit(0);
????????????}?else?{
????????????????System.out.println("輸入有誤,請重新輸入");
????????????????input?=?scanner.next();//?重新將輸入的值賦給input
????????????}
????????}
????????System.out.println("請輸入租車的數量:");
????????int?nums?=?scanner.nextInt();//?定義nums保存車輛數量
????????int?sumPeople?=?0;
????????int?sumThing?=?0;
????????int?sumMoney?=?0;//一天的總金額
????????int?sp?=?0;//?可載人車的數量
????????int?st?=?0;//?可載物車的數量
????????String[]?choicePeopleCarName?=?new?String[nums];//?可載人車的名字數組
????????String[]?choiceThingCarName?=?new?String[nums];//?可載物車的名字數組
????????Car[]?choiceCars?=?new?Car[nums];//?定義初始化數組用于保存被選中的車輛對象
????????for?(int?i?=?0;?i?<?nums;?i++)?{
????????????System.out.println("請輸入車輛序號:");
????????????int?num?=?scanner.nextInt();//?定義num保存車輛序號
????????????/**
?????????????*?判斷車輛序號的正確性,如果有誤,則使這次循環無效
?????????????*/
????????????if(num?>?6?||?num?<=?0){
????????????????System.out.println("輸入有誤,請輸入正確的車輛序號!");
????????????????num?=?scanner.nextInt();
????????????????i--;
????????????????continue;
????????????}
????????????choiceCars[i]?=?cars[num?-?1];//?num-1是因為序號沒有0,而數組有
????????????if?(choiceCars[i]?instanceof?People
????????????????????||?choiceCars[i]?instanceof?PeopleAndThing)?{
????????????????choicePeopleCarName[sp]?=?choiceCars[i].mName;
????????????????sp++;
????????????????sumPeople?+=?choiceCars[i].mPeopleNum;
????????????}
????????????if?(choiceCars[i]?instanceof?Thing
????????????????????||?choiceCars[i]?instanceof?PeopleAndThing)?{
????????????????choiceThingCarName[st]?=?choiceCars[i].mName;
????????????????st++;
????????????????sumThing?+=?choiceCars[i].mThingNum;
????????????}
????????????sumMoney?+=?choiceCars[i].mMoney;
????????}
????????System.out.println("請輸入租車天數:");
????????int?days?=?scanner.nextInt();
????????scanner.close();//?關閉輸入流
????????System.out.println(">>>>>>>>>>>>>>>>>賬單<<<<<<<<<<<<<<<<<<");
????????System.out.println("您所租車的總數量為:"?+?nums);
????????System.out.println("您所租的總天數為:"?+?days);
????????System.out.println("可載人車輛為:");
????????for?(int?i?=?0;?i?<?sp;?i++)?{
????????????System.out.print(choicePeopleCarName[i]?+?"?");
????????}
????????System.out.println("可載人數為:"?+?sumPeople);
????????System.out.println("可載物車輛為:");
????????for?(int?i?=?0;?i?<?st;?i++)?{
????????????System.out.print(choiceThingCarName[i]?+?"?");
????????}
????????System.out.println("可載物數為:"?+?sumThing);
????????System.out.println("總金額為:"?+?(sumMoney?*?days));
????}
}
2016-05-16
String[]?choicePeopleCarName?=?new?String[nums];//?可載人車的名字數組
String[]?choiceThingCarName?=?new?String[nums];//?可載物車的名字數組
你的這兩個數組,存車輛名字的時候是遍歷選中的車輛,每個名字都存進去,輸出的時候也是將的存進去的所有名字按序輸出一遍
所以當你選了2輛相同的車子,名字就重復了。
2016-05-16
不好意思,沒看出來,多調試幾遍程序吧