第九课 Java基础篇——面向对象(综合案例)
1、文字版格斗游戲
格斗游戲,每個(gè)游戲角色的姓名,血量,都不相同,在選定人物的時(shí)候(〈new對(duì)象的時(shí)候),這些信息就應(yīng)該被確定下來。
Role.Java?
package cn.nwafu;import java.util.Random;public class Role {private String name;private int blood;public Role() {}public Role(String name, int blood) {this.name = name;this.blood = blood;}/*** 獲取* @return name*/public String getName() {return name;}/*** 設(shè)置* @param name*/public void setName(String name) {this.name = name;}/*** 獲取* @return blood*/public int getBlood() {return blood;}/*** 設(shè)置* @param blood*/public void setBlood(int blood) {this.blood = blood;}//定義一個(gè)方法攻擊別人//思考?誰攻擊誰//方法的調(diào)用者攻擊參數(shù)public void attack(Role role){//計(jì)算造成的傷害1~20Random r = new Random();int hurt = r.nextInt(20)+1;//剩余血量int remainBlood = role.getBlood()-hurt;//對(duì)剩余血量的一個(gè)驗(yàn)證,如果為負(fù)數(shù),則改為0;remainBlood = remainBlood < 0 ? 0: remainBlood;//修改一下挨揍人的血量;role.setBlood(remainBlood);//this表示方法的調(diào)用者System.out.println(this.getName()+"舉起拳頭,打了"+role.getName()+"一下,造成了"+hurt+"點(diǎn)傷害,"+role.getName()+"還剩下了"+remainBlood+"點(diǎn)血量");}//// }?GameTest.Java
package cn.nwafu;public class GameTest {public static void main(String[] args) {//創(chuàng)建第1個(gè)角色Role r1 = new Role("喬峰", 100);//創(chuàng)建第2個(gè)角色Role r2 = new Role("鳩摩智", 100);//開始格斗,回合制游戲while (true) {//r1打r2r1.attack(r2);if (r2.getBlood() == 0) {System.out.println(r1.getName() + "K.O了" + r2.getName());break;}//r2打r1r2.attack(r1);if (r1.getBlood() == 0) {System.out.println(r2.getName() + "K.O了" + r1.getName());break;}}} }升級(jí)版?
?
?Role.Java
package cn.nwafu.test1;import org.w3c.dom.ls.LSOutput;import java.util.Random;public class Role {private String name;private int blood;private char gender;private String face;String[] boyfaces= {"風(fēng)流俊雅","氣宇軒昂","相貌英俊","五官端正","相貌平平","一塌糊涂","面目猙獰"};String[] girlfaces ={"美奐絕倫","沉魚落雁","婷婷玉立","身材嬌好","相貌平平","相貌簡陋","慘不忍睹"};public Role() {}public Role(String name, int blood,char gender) {this.name = name;this.blood = blood;this.gender = gender;setFace(gender);}public char getGender() {return gender;}public void setGender(char gender) {this.gender = gender;}public String getFace() {return face;}public void setFace(char gender) {Random r =new Random();//長相是隨機(jī)的if (gender == '男'){int index = r.nextInt(boyfaces.length);this.face = boyfaces[index];}else if (gender == '女'){int index = r.nextInt(girlfaces.length);this.face = girlfaces[index];}else {this.face = "面目猙獰";}}/*** 獲取* @return name*/public String getName() {return name;}/*** 設(shè)置* @param name*/public void setName(String name) {this.name = name;}/*** 獲取* @return blood*/public int getBlood() {return blood;}/*** 設(shè)置* @param blood*/public void setBlood(int blood) {this.blood = blood;}//定義一個(gè)方法攻擊別人//思考?誰攻擊誰//方法的調(diào)用者攻擊參數(shù)//attack 攻擊描述:String[] attacks_desc={"%s使出了一招【背心釘】,轉(zhuǎn)到對(duì)方的身后,一掌向%s背心的靈臺(tái)穴拍去。","%s使出了一招【游空探爪】,飛起身形自半空中變掌為抓鎖向%s。","%s大喝一聲,身形下伏,一招【劈雷墜地】,捶向%s雙腿。","%s運(yùn)氣于掌,一瞬間掌心變得血紅,一式【掌心雷】,推向%s。","%s陰手翻起陽手跟進(jìn),一招【沒遮攔】,結(jié)結(jié)實(shí)實(shí)的捶向%s。","%s上步搶身,招中套招,一招【劈掛連環(huán)】,連環(huán)攻向%s。"};//injured 受傷描述:String[] injureds_desc={"結(jié)果%s退了半步,毫發(fā)無損","結(jié)果給%s造成一處瘀傷","結(jié)果一擊命中,%s痛得彎下腰","結(jié)果%s痛苦地悶哼了一聲,顯然受了點(diǎn)內(nèi)傷","結(jié)果%s搖搖晃晃,一跤摔倒在地","結(jié)果%s臉色一下變得慘白,連退了好幾步","結(jié)果『轟』的一聲,%s口中鮮血狂噴而出","結(jié)果%s一聲慘叫,像灘軟泥般塌了下去"};public void attack(Role role){Random r = new Random();//攻擊描述int index = r.nextInt(attacks_desc.length);String KungFu = attacks_desc[index];System.out.printf(KungFu,this.getName(),role.getName());System.out.println();//計(jì)算造成的傷害1~20int hurt = r.nextInt(20)+1;//剩余血量int remainBlood = role.getBlood()-hurt;//對(duì)剩余血量的一個(gè)驗(yàn)證,如果為負(fù)數(shù),則改為0;remainBlood = remainBlood < 0 ? 0: remainBlood;//修改一下挨揍人的血量;role.setBlood(remainBlood);//受傷描述if(remainBlood > 90){System.out.printf(injureds_desc[0],role.getName());}else if(remainBlood > 80 && remainBlood <90){System.out.printf(injureds_desc[1],role.getName());}else if(remainBlood > 70 && remainBlood <80){System.out.printf(injureds_desc[2],role.getName());}else if(remainBlood > 60 && remainBlood <70){System.out.printf(injureds_desc[3],role.getName());}else if(remainBlood > 40 && remainBlood <60){System.out.printf(injureds_desc[4],role.getName());}else if(remainBlood > 20 && remainBlood <40){System.out.printf(injureds_desc[5],role.getName());}else if(remainBlood > 10 && remainBlood <20){System.out.printf(injureds_desc[6],role.getName());}else {System.out.printf(injureds_desc[7],role.getName());}System.out.println();System.out.println("此時(shí),"+role.getName()+"還剩下了"+remainBlood+"點(diǎn)血量");}//展示角色的信息public void showRoleInfo(){System.out.println("姓名為:"+getName());System.out.println("血量為:"+getBlood());System.out.println("性別為:"+getGender());System.out.println("長相為:"+getFace());}// }GameTest
package cn.nwafu.test1;public class GameTest {public static void main(String[] args) {//創(chuàng)建第1個(gè)角色Role r1 = new Role("喬峰", 100,'男');//創(chuàng)建第2個(gè)角色Role r2 = new Role("鳩摩智", 100,'男');//展示人物信息r1.showRoleInfo();r2.showRoleInfo();//開始格斗,回合制游戲while (true) {//r1打r2r1.attack(r2);if (r2.getBlood() == 0) {System.out.println(r1.getName() + "K.O了" + r2.getName());break;}//r2打r1r2.attack(r1);if (r1.getBlood() == 0) {System.out.println(r2.getName() + "K.O了" + r1.getName());break;}}} }2、對(duì)象數(shù)組練習(xí)
a.
定義數(shù)組存儲(chǔ)3個(gè)商品對(duì)象。
商品的屬性:商品的id,名字,價(jià)格,庫存。
創(chuàng)建三個(gè)商品對(duì)象,并把商品對(duì)象存入到數(shù)組當(dāng)中.
Goods.Java
package cn.nwafu.test3;public class Goods {private String id;private String name;private double price;private int count;public Goods() {}public Goods(String id, String name, double price, int count) {this.id = id;this.name = name;this.price = price;this.count = count;}/*** 獲取* @return id*/public String getId() {return id;}/*** 設(shè)置* @param id*/public void setId(String id) {this.id = id;}/*** 獲取* @return name*/public String getName() {return name;}/*** 設(shè)置* @param name*/public void setName(String name) {this.name = name;}/*** 獲取* @return price*/public double getPrice() {return price;}/*** 設(shè)置* @param price*/public void setPrice(double price) {this.price = price;}/*** 獲取* @return count*/public int getCount() {return count;}/*** 設(shè)置* @param count*/public void setCount(int count) {this.count = count;}}GoodsTest
package cn.nwafu.test3;public class GoodsTest {public static void main(String[] args) {//定義一個(gè)數(shù)組Goods[] arr = new Goods[3];//創(chuàng)建三個(gè)商品對(duì)象Goods g1 = new Goods("001","華為P40",5999.0,100);Goods g2 = new Goods("002","保溫杯",227.0,50);Goods g3 = new Goods("003","枸杞",12.7,70);//把商品添加到數(shù)組中arr[0] = g1;arr[1] = g2;arr[2] = g3;//遍歷數(shù)組for (int i = 0; i < arr.length; i++) {Goods goods = arr[i];System.out.println(goods.getId()+","+goods.getName()+","+goods.getPrice()+","+goods.getCount());}} }b.
定義數(shù)組存儲(chǔ)3部汽車對(duì)象。
汽車的屬性:品牌,價(jià)格,顏色。
創(chuàng)建三個(gè)汽車對(duì)象,數(shù)據(jù)通過鍵盤錄入而來,并把數(shù)據(jù)存入到數(shù)組當(dāng)中。
Car.Java
package cn.nwafu.test5;public class Car {private String brand;private int price;private String color;public Car() {}public Car(String brand, int price, String color) {this.brand = brand;this.price = price;this.color = color;}/*** 獲取* @return brand*/public String getBrand() {return brand;}/*** 設(shè)置* @param brand*/public void setBrand(String brand) {this.brand = brand;}/*** 獲取* @return price*/public int getPrice() {return price;}/*** 設(shè)置* @param price*/public void setPrice(int price) {this.price = price;}/*** 獲取* @return color*/public String getColor() {return color;}/*** 設(shè)置* @param color*/public void setColor(String color) {this.color = color;}}CarTest.Java
package cn.nwafu.test5;import java.util.Scanner;public class CarTest {public static void main(String[] args) {//創(chuàng)建一個(gè)數(shù)組用來存3個(gè)汽車對(duì)象Car[] arr =new Car[3];Scanner sc =new Scanner(System.in);for (int i = 0; i < arr.length; i++) {//創(chuàng)建一個(gè)對(duì)象Car c = new Car();//注意:不能寫在循環(huán)的外面,否則只創(chuàng)建一個(gè)對(duì)象,最后輸出三個(gè)第三輛車的信息//錄入汽車的屬性System.out.println("請(qǐng)輸入汽車的品牌");String brand = sc.next();c.setBrand(brand);System.out.println("請(qǐng)輸入汽車的價(jià)格");int price = sc.nextInt();c.setPrice(price);System.out.println("請(qǐng)輸入汽車的顏色");String color = sc.next();c.setColor(color);//把汽車對(duì)象放入數(shù)組中arr[i] = c;}for (int i = 0; i < arr.length; i++) {Car car =arr[i];System.out.println(car.getBrand()+","+ car.getPrice()+","+car.getColor());}} }c.
定義數(shù)組存儲(chǔ)3部手機(jī)對(duì)象。
手機(jī)的屬性:品牌,價(jià)格,顏色。
要求,計(jì)算出三部手機(jī)的平均價(jià)格
Phone.Java
package cn.nwafu.test6;public class Phone {private String brand;private int price;private String color;public Phone() {}public Phone(String brand, int price, String color) {this.brand = brand;this.price = price;this.color = color;}/*** 獲取* @return brand*/public String getBrand() {return brand;}/*** 設(shè)置* @param brand*/public void setBrand(String brand) {this.brand = brand;}/*** 獲取* @return price*/public int getPrice() {return price;}/*** 設(shè)置* @param price*/public void setPrice(int price) {this.price = price;}/*** 獲取* @return color*/public String getColor() {return color;}/*** 設(shè)置* @param color*/public void setColor(String color) {this.color = color;}public String toString() {return "Phone{brand = " + brand + ", price = " + price + ", color = " + color + "}";} }PhoneTest.Java
package cn.nwafu.test6;public class PhoneTest {public static void main(String[] args) {Phone[] arr = new Phone[3];Phone p1 = new Phone("小米", 1999, "白色");Phone p2 = new Phone("華為", 4999, "藍(lán)色");Phone p3 = new Phone("魅族", 3999, "紅色");arr[0] = p1;arr[1] = p2;arr[2] = p3;int sum = 0;for (int i = 0; i < arr.length; i++) {Phone phone = arr[i];sum += phone.getPrice();}int avg = sum / arr.length;System.out.println(avg);} }d.
定義數(shù)組存儲(chǔ)4個(gè)女朋友的對(duì)象
女朋友的屬性:姓名、年齡、性別、愛好
要求1:計(jì)算出四女朋友的平均年齡
要求2∶統(tǒng)計(jì)年齡比平均值低的女朋友有幾個(gè)?并把她們的所有信息打印出來。
GirlFriend.Java
package cn.nwafu.test7;public class GirlFriend {private String name;private int age;private String gender;private String hobby;public GirlFriend() {}public GirlFriend(String name, int age, String gender, String hobby) {this.name = name;this.age = age;this.gender = gender;this.hobby = hobby;}/*** 獲取* @return name*/public String getName() {return name;}/*** 設(shè)置* @param name*/public void setName(String name) {this.name = name;}/*** 獲取* @return age*/public int getAge() {return age;}/*** 設(shè)置* @param age*/public void setAge(int age) {this.age = age;}/*** 獲取* @return gender*/public String getGender() {return gender;}/*** 設(shè)置* @param gender*/public void setGender(String gender) {this.gender = gender;}/*** 獲取* @return hobby*/public String getHobby() {return hobby;}/*** 設(shè)置* @param hobby*/public void setHobby(String hobby) {this.hobby = hobby;}}GirlFriendTest.Java
package cn.nwafu.test7;public class GirlFriendTest {public static void main(String[] args) {GirlFriend[] arr = new GirlFriend[4];GirlFriend gf1 = new GirlFriend("小詩詩",18, "萌妹子","吃零食");GirlFriend gf2 = new GirlFriend("小丹丹",19, "萌妹子","玩游戲");GirlFriend gf3 = new GirlFriend("小仙仙",21, "萌妹子","看書學(xué)習(xí)");GirlFriend gf4 = new GirlFriend("小莉莉",20, "憨妹子","睡覺");arr[0] = gf1;arr[1] = gf2;arr[2] = gf3;arr[3] = gf4;int sum = 0;for (int i = 0; i < arr.length; i++) {GirlFriend gf = arr[i];sum += gf.getAge();}int avg = sum / arr.length;System.out.println(avg);int count = 0;for (int i = 0; i < arr.length; i++) {GirlFriend gf = arr[i];if(gf.getAge()<avg){System.out.println(gf.getName()+","+gf.getAge()+","+gf.getGender()+","+gf.getHobby());count ++;}}System.out.println("年齡比平均值低的有"+count+"個(gè)");}}e.
定義一個(gè)長度為3的數(shù)組,數(shù)組存儲(chǔ)1~3名學(xué)生對(duì)象作為初始數(shù)據(jù),學(xué)生對(duì)象的學(xué)號(hào),姓名各不相同。
學(xué)生的屬性:學(xué)號(hào),姓名,年齡。
要求1∶再次添加一個(gè)學(xué)生對(duì)象,并在添加的時(shí)候進(jìn)行學(xué)號(hào)的唯一性判斷。
要求2:添加完畢之后,遍歷所有學(xué)生信息。
要求3:通過id刪除學(xué)生信息
如果存在,則刪除,如果不存在,則提示刪除失敗。
要求4∶刪除完畢之后,遍歷所有學(xué)生信息。
要求5:查詢數(shù)組id為“2”的學(xué)生,如果存在,則將他的年齡+1歲
Student.Java
package cn.nwafu.test8;public class Student {private int id;private String name;private int age;public Student() {}public Student(int id, String name, int age) {this.id = id;this.name = name;this.age = age;}/*** 獲取* @return id*/public int getId() {return id;}/*** 設(shè)置* @param id*/public void setId(int id) {this.id = id;}/*** 獲取* @return name*/public String getName() {return name;}/*** 設(shè)置* @param name*/public void setName(String name) {this.name = name;}/*** 獲取* @return age*/public int getAge() {return age;}/*** 設(shè)置* @param age*/public void setAge(int age) {this.age = age;}public String toString() {return "Student{id = " + id + ", name = " + name + ", age = " + age + "}";} }StudentTest.Java
package cn.nwafu.test8;import com.sun.source.tree.NewArrayTree;public class StudentTest {public static void main(String[] args) { // 定義一個(gè)長度為3的數(shù)組,數(shù)組存儲(chǔ)1~3名學(xué)生對(duì)象作為初始數(shù)據(jù),學(xué)生對(duì)象的學(xué)號(hào),姓名各不相同。 // 學(xué)生的屬性:學(xué)號(hào),姓名,年齡。 // 要求1∶再次添加一個(gè)學(xué)生對(duì)象,并在添加的時(shí)候進(jìn)行學(xué)號(hào)的唯一性判斷。 // 要求2:添加完畢之后,遍歷所有學(xué)生信息。 // 要求3:通過id刪除學(xué)生信息 // 如果存在,則刪除,如果不存在,則提示刪除失敗。 // 要求4∶刪除完畢之后,遍歷所有學(xué)生信息。 // 要求5:查詢數(shù)組id為“2”的學(xué)生,如果存在,則將他的年齡+1歲//定義一個(gè)對(duì)象數(shù)組Student[] arr = new Student[3];//創(chuàng)建學(xué)生對(duì)象并添加到數(shù)組當(dāng)中Student stu1 = new Student(1,"張三",23);Student stu2 = new Student(2,"李四",24);Student stu3 = new Student(3,"王五",25);arr[0] = stu1;arr[1] = stu2;arr[2] = stu3;//要求1∶再次添加一個(gè)學(xué)生對(duì)象,并在添加的時(shí)候進(jìn)行學(xué)號(hào)的唯一性判斷。Student stu4 = new Student(4,"趙六",26);//唯一性判斷//已存在 ---不用添加//不存在--- 就可以把學(xué)生對(duì)象添加進(jìn)數(shù)組//1.數(shù)組已經(jīng)存滿---只能創(chuàng)建一個(gè)新的數(shù)組,新數(shù)組的長度=老數(shù)組+1// 2.數(shù)組沒有存滿---直接添加//唯一性判斷boolean flag = contains(arr,stu4.getId());if(flag){//已存在 ---不用添加System.out.println("當(dāng)前id已存在,請(qǐng)修改id后再進(jìn)行添加");}else{//不存在--- 就可以把學(xué)生對(duì)象添加進(jìn)數(shù)組int count = getCount(arr);if(arr.length == count){//1.數(shù)組已經(jīng)存滿---只能創(chuàng)建一個(gè)新的數(shù)組,新數(shù)組的長度=老數(shù)組+1Student[] newArr = creatNewArr(arr);newArr[count] = stu4;//把stu4添加進(jìn)去//要求2:添加完畢之后,遍歷所有學(xué)生信息。printArr(newArr);//要求3:通過id刪除學(xué)生信息int index = getIndex(newArr,4);if (index >= 0){//如果存在,則刪除newArr[index] = null;}else{//如果不存在,則提示刪除失敗。System.out.println("當(dāng)前id不存在,刪除失敗");}//要求4∶刪除完畢之后,遍歷所有學(xué)生信息。printArr(newArr);//要求5:查詢數(shù)組id為“2”的學(xué)生,如果存在,則將他的年齡+1歲int newIndex = getIndex(newArr,2);if(newIndex >= 0){//如果存在,則將他的年齡+1歲Student stu = newArr[newIndex];int newAge = stu.getAge()+1;//注意:修改完之后要放回去,否則結(jié)果不變stu.setAge(newAge);}else{//如果不存在,修改失敗System.out.println("當(dāng)前id不存在,修改失敗");}//遍歷數(shù)組printArr(newArr);}else{// 2.數(shù)組沒有存滿---直接添加//[stu1,stu2,null]//getCount獲取到的是2,表示數(shù)組當(dāng)中已經(jīng)有了2個(gè)元素///還有一層意思:如果下一次要添加數(shù)據(jù),就是添加到2索引的位置arr[count] = stu4;printArr(arr);//要求3:通過id刪除學(xué)生信息int index = getIndex(arr,4);if (index >= 0){//如果存在,則刪除arr[index] = null;}else{//如果不存在,則提示刪除失敗。System.out.println("當(dāng)前id不存在,刪除失敗");}//要求4∶刪除完畢之后,遍歷所有學(xué)生信息。printArr(arr);//要求5:查詢數(shù)組id為“2”的學(xué)生,如果存在,則將他的年齡+1歲int newIndex = getIndex(arr,2);if(newIndex >= 0){//如果存在,則將他的年齡+1歲Student stu =arr[newIndex];int newAge = stu.getAge()+1;//注意:修改完之后要放回去,否則結(jié)果不變stu.setAge(newAge);}else{//如果不存在,修改失敗System.out.println("當(dāng)前id不存在,修改失敗");}//遍歷數(shù)組printArr(arr);}}//要求3:通過id刪除學(xué)生信息//如果存在,則刪除,如果不存在,則提示刪除失敗。 // int index = getIndex(arr,2); // if (index >= 0){ // //如果存在,則刪除 // arr[index] = null; // }else{ // //如果不存在,則提示刪除失敗。 // System.out.println("刪除失敗"); // }}//找到id在數(shù)組中的索引值,以便刪除信息public static int getIndex(Student[] arr,int id){for (int i = 0; i < arr.length; i++) {Student stu = arr[i];if(stu != null){int sid = stu.getId();if (sid == id){return i ;}}}//當(dāng)循環(huán)結(jié)束還沒有找到則說明不存在return -1;}//打印數(shù)組public static void printArr(Student[] arr) {for (int i = 0; i < arr.length; i++) {Student stu = arr[i];if (stu != null){System.out.println(stu.getId()+","+stu.getName()+","+stu.getAge());}}}//創(chuàng)建一個(gè)新的數(shù)組,長度=老數(shù)組的長度+1//然后把老數(shù)組的元素,拷貝到新數(shù)組當(dāng)中public static Student[] creatNewArr (Student[]arr){Student[] newArr = new Student[arr.length + 1];for (int i = 0; i < arr.length; i++) {newArr[i] = arr[i];}return newArr;}//判斷當(dāng)前數(shù)組已經(jīng)存了幾個(gè)元素public static int getCount (Student[]arr){int count = 0;for (int i = 0; i < arr.length; i++) {if (arr[i] != null) {count++;}}return count;}//唯一性判斷public static boolean contains (Student[]arr,int id){for (int i = 0; i < arr.length; i++) {Student stu = arr[i];if (stu != null){int sid = stu.getId();if (sid == id) {return true;}}}return false;}}最后在末尾說幾句話,最近幾天隨著課程的深入,練習(xí)的代碼明顯比前幾天多了很多,個(gè)人感覺這些習(xí)題還不錯(cuò),有練習(xí)的價(jià)值,希望我能夠堅(jiān)持下去,共勉!
總結(jié)
以上是生活随笔為你收集整理的第九课 Java基础篇——面向对象(综合案例)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【互联网的那些事】互联网的 10 年,每
- 下一篇: IP101GR/IP101GA原理图和代