700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 【Java SE 代码回顾】——day05_私有属性 公有方法 switch

【Java SE 代码回顾】——day05_私有属性 公有方法 switch

时间:2019-04-29 20:09:58

相关推荐

【Java SE 代码回顾】——day05_私有属性 公有方法 switch

这个系列是对javaSE课程代码的回顾,所有Demo都是亲自动手实现的,并做了小小的change,为了方便自己理解和后期复习,代码里加了大量的注释。现对所有知识点的代码进行复习整理,进一步理解、完善代码,对注释进行补充。其中重要的知识点会单独说明,但主要以代码为主。

说明:博客是对学习内容的巩固,很多注释是为了自己理解,所以不会很专业。

------------------------------------------------------游戏模拟------------------------------------------------

package cn.tjpu.javase05.lol.Player;/*** 实现一个游戏* 要求:*在LOL游戏中,游戏中的用户应该用一个类来进行描述,比如,有以下属性信息:*玩家的游戏账号(比如: "小丸子")玩家所在的对局ID(比如: "艾欧尼亚-1001")玩家所使用的英雄角色(比如: 易大师或者阿狸或蘑菇....)玩家所装配的装备(装备应该可以是多个,比如"无尽之刃"、"狂徒铠甲"等)玩家助攻数玩家击杀人头数玩家斩杀小兵数玩家的本局游戏实时得分(游戏得分=助攻数*10+击杀人头数*20+小兵数*2+装备件数*5)玩家的历史累计得分玩家的英雄等级:[20,40)-->1级[40,60)-->2级[60,)-->3级*写这个类的核心思想: 有些属性,可以简单赋值 ,有些属性,不能简单赋值,需要经过很复杂的内部逻辑处理之后才赋值*所以通常应该把属性全部修饰成私有的,然后暴露出get和set之类方法来让使用这个类的人去操作对象上的数据 *好处:写这个类的人,可以把内部数据处理逻辑封装起来,增加了类的内聚性,增加了数据逻辑的安全性,同时,降低了使用者的复杂度*/import java.util.ArrayList;public class Player {// 玩家属性,设置成私有防止外部直接调用private String account;private String missionId;private String heroName;//装备不止一个private ArrayList<String> equipments = new ArrayList<String>();private int attack;private int kills;private int killedSoliders;private int missionScore;private int amountScore;private int heroLeval;// 设置玩家账号的方法public void setAccount(String account) {this.account = account;}// 设置对局id的方法public void setMissionId(String missionId) {this.missionId = missionId;}// 设置玩家使用英雄角色的方法public void setHeroName(String heroName) {this.heroName = heroName;}//设置历史总分的方法public void setAmountScore(int amountScore) {this.amountScore = amountScore;}// 增加装备的方法public void addEquipment(String equipment) {//equipments是一个listthis.equipments.add(equipment);// 每增加一件装备本局实时得分+5分,实时得分只能根据其他因素计算得打,不能由玩家自己设置this.missionScore += 5;//本局实时得分还包括其他因素,所以累加// 每增加一件装备历史累计得分+5分this.amountScore += 5;// 更新用户等级this.setHeroLeval();}// 增加助攻数的方法public void addAttack() {this.attack++;// 每增加一次助攻本局实时得分+10分this.missionScore += 10;// 每增加一次助攻历史累计得分+10分this.amountScore += 10;// 更新用户等级this.setHeroLeval();}// 增加击杀人头数的方法public void addKills() {this.kills++;// 每击杀一个人头本局实时得分+20分this.missionScore += 20;// 每杀一个人头历史累计得分+20分this.amountScore += 20;// 更新用户等级this.setHeroLeval();//得分变了用户等级就要更新,且该功能封装在类里,玩家不能更改}// 增加杀小兵的方法public void addKilledSoliders() {this.killedSoliders++;// 每杀一个小兵本局实时得分+2分this.missionScore += 2;// 每杀杀一个小兵历史累计得分+2分this.amountScore += 2;// 更新用户等级this.setHeroLeval();}// 设置玩家本局英雄等级,根据实时得分计算玩家等级private void setHeroLeval() {if (this.missionScore > 20 && this.missionScore <= 40) {this.heroLeval = 1;}if (this.missionScore > 40 && this.missionScore <= 60) {this.heroLeval = 2;}if (this.missionScore > 60) {this.heroLeval = 3;}}// 为了让外部文件调用该类内的私有属性,需通过公有方法来得到值public String getAccount() {return account;}public String getMissionId() {return missionId;}public String getHeroName() {return heroName;}public ArrayList<String> getEquipments() {return equipments;}public int getAttack() {return attack;}public int getKills() {return kills;}public int getKilledSoliders() {return killedSoliders;}public int getMissionScore() {return missionScore;}public int getAmountScore() {return amountScore;}public int getHeroLeval() {return heroLeval;}}

package cn.tjpu.javase05.lol.Player;/*** 游戏测试类*/public class PlayerTest {public static void main(String[] args) {// 创建一个玩家并初始化(给属性赋值)Player player1 = new Player();player1.setAccount("醪糟小丸子");player1.setMissionId("艾欧尼亚-1001");player1.setHeroName("阿狸");player1.setAmountScore(1000);// 历史得分/** 使用该对象的一些功能,计算等级*/// 购买装备player1.addEquipment("狂徒铠甲");// 击杀人头// player1.addKills();// 助攻player1.addAttack();// 增加装备player1.addEquipment("无尽之刃");// 射杀小兵player1.addKilledSoliders();// 打印玩家本局实施得分,历史总分,英雄等级System.out.println("本局实时得分" + player1.getMissionScore());System.out.println("历史总分" + player1.getAmountScore());System.out.println("本局英雄等级" + player1.getHeroLeval());System.out.println("------------------------------------------");/** 根据规则,功能方法使用的越多,等级就会上升*/// 购买装备player1.addEquipment("狂徒铠甲");player1.addEquipment("无尽之刃");// 击杀人头player1.addKills();player1.addKills();player1.addKills();// 助攻player1.addAttack();player1.addAttack();player1.addAttack();// 增加装备player1.addEquipment("狂徒铠甲");// 射杀小兵player1.addKilledSoliders();player1.addKilledSoliders();player1.addKilledSoliders();// 打印玩家本局实施得分,历史总分,英雄等级System.out.println("本局实时得分" + player1.getMissionScore());System.out.println("历史总分" + player1.getAmountScore());System.out.println("本局英雄等级" + player1.getHeroLeval());}}

---------------------------------------------------售货系统模拟----------------------------------------------

package cn.tjpu.javase05.shop;/*** 商品类*/public class Product {private String PId;private String PName;private float price;private int Number;public Product() {}//可以用带参构造函数给实例化出来的对象一次性赋值public Product(String PId, String PName, float price, int Number) {this.PId = PId;this.PName = PName;this.Number = Number;this.price = price;}//得到某个属性的值public String getPId() {return PId;}//单独为某个属性赋值,单独修改某个属性public void setPId(String pId) {PId = pId;}public String getPName() {return PName;}public void setPName(String pName) {PName = pName;}public float getPrice() {return price;}public void setPrice(float price) {this.price = price;}public int getNumber() {return Number;}public void setNumber(int number) {Number = number;}// toString是一个用来把对象内部数据拼装成字符串的方法(可按照自己的需要修改)public String toString() {return this.getPId() + "," + this.getPName() + "," + this.getPrice()+ "," + this.getNumber();}}

package cn.tjpu.javase05.shop;/*** 商品管理类* 1.封装所有商品数据* 2.在该类中创建操作商品数据的方法* 商品列表及其方法*/import java.util.ArrayList;public class ProductMange {// 创建一个用来存放商品的列表,私有变量,只能通过公有方法来往里面填数据取数据private ArrayList<Product> prdts = new ArrayList<>();// 通过公有方法往商品列表里加商品public void addProduct(Product product) {this.prdts.add(product);}// 取列表中所有商品的方法public ArrayList<Product> getPrds() {return this.prdts;}// 通过给定商品名取商品列表中的商品数据的所有信息public Product getProductByName(String name) {// 遍历list中的所有商品,找到商品名与传入参数一致的那一个for (int i = 0; i < prdts.size(); i++) {if (prdts.get(i).getPName().equals(name)) {return prdts.get(i);// 找到的第i个商品}}return null;}// 打印所有商品信息public void showProduct() {for (int i = 0; i < prdts.size(); i++) {System.out.println("商品信息:" + prdts.get(i));}}}

package cn.tjpu.javase05.shop;/*** 造商品信息的类*/public class CreatProducts {//创建一个给商品对象赋值的方法public static void Creat(ProductMange prodts) {//造商品数据(无参构造)Product prodt1=new Product();prodt1.setPId("001");prodt1.setPName("牛奶");prodt1.setPrice(5.5f);prodt1.setNumber(0);Product prodt2=new Product();prodt2.setPId("002");prodt2.setPName("面包");prodt2.setPrice(8.5f);prodt2.setNumber(0);//有参构造Product prodt3=new Product("003","火腿",1.5f,0);Product prodt4=new Product("004","巧克力",7.5f,0);Product prodt5=new Product("005","可乐",3.5f,0);//在商品列表中添加商品prodts.addProduct(prodt1);prodts.addProduct(prodt2);prodts.addProduct(prodt3);prodts.addProduct(prodt4);prodts.addProduct(prodt5);}}

package cn.tjpu.javase05.shop;/*** 购物车管理类*/import java.util.ArrayList;public class CartMange {// 创建一个购物车列表,用来装用户加入购物车的商品,私有静态变量,只能公有静态方法使用private static ArrayList<Product> car = new ArrayList<>();// 往购物车中加商品(公有静态方法),接收用户输入的字符串如:面包:3,可乐:2,火腿肠:4public static void addPrdtsToCart(String prdts, ProductMange prdtMg) {// 切割字符串(String prdts:用户从终端输入的字符串)String[] slipt = prdts.split(",");for (int i = 0; i < slipt.length; i++) {String[] prdtsAndNum = slipt[i].split(":");// 把从终端拿到的字符串都拆开后,就是一个个具体的值,因此要实例化一个商品,然后把这些值赋给对象Product p = new Product();p.setPName(prdtsAndNum[0]);p.setNumber(Integer.parseInt(prdtsAndNum[1]));/*// 补全商品信息* // 方法1:利用的商品管理器中的数据 ArrayList<Product>// ProductMange prdtMg:商品管理类的一个对象prodts = prdtMg.getPrds(); // 调用方法,取出列表中所有商品for (int j = 0; j < prodts.size(); j++) {if (prodts.get(j).getPName().equals(prdtsAndNum[0])) {p.setPId(prodts.get(j).getPId());p.setPrice(prodts.get(j).getPrice());}}*/// 方法2:直接调用产品管理类的方法Product pbn = prdtMg.getProductByName(prdtsAndNum[0]);p.setPId(pbn.getPId());p.setPrice(pbn.getPrice());// 将商品数据添加到购物车listcar.add(p);}}// 打印购物车商品信息public static void showCar() {for (int i = 0; i < car.size(); i++) {System.out.println(car.get(i));}}}

package cn.tjpu.javase05.shop;/*** 自动售货系统的程序入口*/import java.util.Scanner;public class ShopMenu {public static void main(String[] args) {// 创建ProductMange类对象,才可以调用里面的方法——>产品管理器ProductMange PrdtsMange = new ProductMange();// 利用工具方法为商品池添加商品数据CreatProducts.Creat(PrdtsMange);// 创建一个CartMange类的实例对象——>购物车管理器CartMange cartMange = new CartMange();// 和顾客的交互界面System.out.println("欢迎来到小丸子商店!请选择菜单!");System.out.println("1.浏览商品|2.购物|3.查看购物车|4.修改购物车|5.提交订单|6.付款|7.退出");// 接收顾客的输入Scanner scanner = new Scanner(System.in);// 用循环可以让顾客不断的选择菜单boolean flag = true;while (flag) {String option = scanner.nextLine();switch (option) {case "1":// 调用显示信息的方法PrdtsMange.showProduct();break;// 购物就是把用户输入的商品和数量放入购物车case "2":System.out.println("请输入您要购买的商品和数量。如:面包:3,可乐:2");String prdtsAndNum = scanner.nextLine();CartMange.addPrdtsToCart(prdtsAndNum, PrdtsMange);break;case "3":CartMange.showCar();break;case "4":System.out.println("修改购物车ing...");break;case "5":System.out.println("提交订单ing...");break;case "6":System.out.println("付款ing...");break;case "7":flag = false;break;default:System.out.println("没有该选项,重新选择");}}}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。