面向对象综合案例:

发布时间:2024年01月24日

1.键盘录入两套体系:

(1)第一套:

  • nextInt()接收整数

  • nextDouble()接收小数

  • next()接收字符串

  • 注意:遇到空格,制表符,回车就停止接受。这些符号后面的数据就不会接受了

(2)第二套:

  • nextLine()接收字符串

  • 注意:只有遇到回车才停止

(3)禁止混用以上的两套体系:

弊端:先用nextInt,再用nextLine会导致下面的nextLine接受不到数据;

2.文字版格斗游戏:

格斗游戏,每个游戏角色姓名、血量、都不相同,在选定人物的时候(new对象的时候),这些信息就应该被确定下来。

例:

(1)简单版:?

package com.PlayGame;
?
import java.util.Random;
?
public class Role {
 ? ?private String name;
 ? ?private int blood;
 ? ?public void attack(Role role ){
// ? ? ?  计算造成的伤害1~20
 ? ? ? ?Random random = new Random();
 ? ? ? ?int hurt=random.nextInt(20)+1;
// ? ? ?  剩余血量
 ? ? ? ?int count=role.getBlood()-hurt;
// ? ? ?  对剩余血量做一个验证,为负数则修改为0;
 ? ? ? ?count=count<0?0:count;
// ? ? ?  修改挨揍人的血量
 ? ? ? ?role.setBlood(count);
 ? ? ? ?System.out.println(this.getName()+"打了"+role.getName()+"一下,造成"+hurt+"点的伤害,"+role.getName()+"还剩下"+count+"点的血量");
 ?  }
?
 ? ?public Role() {
 ?  }
?
 ? ?public Role(String name, int blood) {
 ? ? ? ?this.name = name;
 ? ? ? ?this.blood = blood;
 ?  }
?
 ? ?/**
 ? ? * 获取
 ? ? * @return name
 ? ? */
 ? ?public String getName() {
 ? ? ? ?return name;
 ?  }
?
 ? ?/**
 ? ? * 设置
 ? ? * @param name
 ? ? */
 ? ?public void setName(String name) {
 ? ? ? ?this.name = name;
 ?  }
?
 ? ?/**
 ? ? * 获取
 ? ? * @return blood
 ? ? */
 ? ?public int getBlood() {
 ? ? ? ?return blood;
 ?  }
?
 ? ?/**
 ? ? * 设置
 ? ? * @param blood
 ? ? */
 ? ?public void setBlood(int blood) {
 ? ? ? ?this.blood = blood;
 ?  }
?
 ? ?public String toString() {
 ? ? ? ?return "XW{name = " + name + ", blood = " + blood + "}";
 ?  }
}
?public static void main(String[] args) {
?
 ? ? ? ?Role r1 = new Role("乔峰",100);
 ? ? ? ?Role r2 = new Role("小五",100);
// ? ? ?  r1.攻击(xw)方法的调用者攻击参数
 ? ? ? ?while (true){
 ? ? ? ? ? ?r1.attack(r2);
 ? ? ? ? ? ?if(r2.getBlood()==0){
 ? ? ? ? ? ? ? ?System.out.println(r1.getName()+"ko了"+r2.getName());
 ? ? ? ? ? ? ? ?break;
 ? ? ? ? ?  }
 ? ? ? ? ? ?r2.attack(r1);
 ? ? ? ? ? ?if(r1.getBlood()==0){
 ? ? ? ? ? ? ? ?System.out.println(r2.getName()+"ko了"+r1.getName());
 ? ? ? ? ? ? ? ?break;
 ? ? ? ? ?  }
 ? ? ?  }
 ?  }

(2)优化版:

package com.Test;
?
import java.util.Random;
?
public class Role {
 ? ?private String name;
 ? ?private int blood;
 ? ?private String gender;
 ? ?private String face;//长相随机
 ? ?String[] boyfaces = {"风流俊雅", "气宇轩昂", "相貌英俊", "五官端正"};
 ? ?String[] girlfaces = {"沉鱼落雁", "亭亭玉立", "相貌平平", "惨不忍睹"};
// ?  attack受伤描述
 ? ?String[] attacks_desc={
 ? ? ? ? ? ?"%s使出一招【背心钉】,转到对方身后,一掌向%s背心的灵台穴拍去",
 ? ? ? ? ? ?"%s使出一招【游空探爪】,转到对方身后,一掌向%s抓去",
 ? ? ? ? ? ?"%s使出一招【掌心雷】,转到对方身后,一掌向%s拍去",
 ?  };
 ? ?//injured受伤描述:
 ? ?String[] injureds_desc={
 ? ? ? ? ? ?"%s退了半步,毫发无损",
 ? ? ? ? ? ?"%s造成一处淤伤",
 ? ? ? ? ? ?"%s一击命中,疼的弯下腰",
 ?  };
?
 ? ?public Role() {
 ?  }
?
 ? ?public Role(String name, int blood, String gender) {
 ? ? ? ?this.name = name;
 ? ? ? ?this.blood = blood;
 ? ? ? ?this.gender = gender;
 ? ? ? ?setFace(gender);
 ?  }
 ? ?public void showRoleInfo(){
 ? ? ? ?System.out.println("姓名为:"+getName());
 ? ? ? ?System.out.println("血量为:"+getBlood());
 ? ? ? ?System.out.println("性别为:"+getGender());
 ? ? ? ?System.out.println("长相为:"+getFace());
 ?  }
?
?
 ? ?public void attack(Role role) {
 ? ? ? ?Random random = new Random();
 ? ? ? ?int index = random.nextInt(attacks_desc.length);
 ? ? ? ?String kungfu=attacks_desc[index];
// ? ? ?  输出一个攻击的效果
 ? ? ? ?System.out.printf(kungfu,this.getName(),role.getName());
// ? ? ?  计算造成的伤害1~20
?
 ? ? ? ?int hurt = random.nextInt(20) + 1;
// ? ? ?  剩余血量
 ? ? ? ?int count = role.getBlood() - hurt;
// ? ? ?  对剩余血量做一个验证,为负数则修改为0;
 ? ? ? ?count = count < 0 ? 0 : count;
// ? ? ?  修改挨揍人的血量
 ? ? ? ?role.setBlood(count);
// ? ? ?  受伤描述
// ? ? ?  血量>90 0索引
// ? ? ?  40~90 1索引
// ? ? ?  0~30 2索引
 ? ? ? ?if(count>90){
 ? ? ? ? ? ?System.out.printf(injureds_desc[0],role.getName());
 ? ? ?  } else if (count>=40&&count<=90) {
 ? ? ? ? ? ?System.out.printf(injureds_desc[1],role.getName());
 ? ? ?  }else {
 ? ? ? ? ? ?System.out.printf(injureds_desc[2],role.getName());
 ? ? ?  }
 ? ? ? ?System.out.println( role.getName() + ",还剩下" + count + "点的血量");
 ?  }
?
 ? ?/**
 ? ? * 获取
 ? ? *
 ? ? * @return name
 ? ? */
 ? ?public String getName() {
 ? ? ? ?return name;
 ?  }
?
 ? ?/**
 ? ? * 设置
 ? ? *
 ? ? * @param name
 ? ? */
 ? ?public void setName(String name) {
 ? ? ? ?this.name = name;
 ?  }
?
 ? ?/**
 ? ? * 获取
 ? ? *
 ? ? * @return blood
 ? ? */
 ? ?public int getBlood() {
 ? ? ? ?return blood;
 ?  }
?
 ? ?/**
 ? ? * 设置
 ? ? *
 ? ? * @param blood
 ? ? */
 ? ?public void setBlood(int blood) {
 ? ? ? ?this.blood = blood;
 ?  }
?
 ? ?/**
 ? ? * 获取
 ? ? *
 ? ? * @return gender
 ? ? */
 ? ?public String getGender() {
 ? ? ? ?return gender;
 ?  }
?
 ? ?/**
 ? ? * 设置
 ? ? *
 ? ? * @param gender
 ? ? */
 ? ?public void setGender(String gender) {
 ? ? ? ?this.gender = gender;
 ?  }
?
 ? ?/**
 ? ? * 获取
 ? ? *
 ? ? * @return face
 ? ? */
 ? ?public String getFace() {
 ? ? ? ?return face;
 ?  }
?
 ? ?/**
 ? ? * 设置
 ? ? *
 ? ? * @param gender
 ? ? */
 ? ?public void setFace(String gender) {
 ? ? ? ?Random r = new Random();
 ? ? ? ?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 = "面目狰狞";
 ? ? ?  }
 ?  }
?
 ? ?public String toString() {
 ? ? ? ?return "Role{name = " + name + ", blood = " + blood + ", gender = " + gender + ", face = " + face + "}";
 ?  }
}
public static void main(String[] args) {
 ? ? ? ?Role r1 = new Role("乔峰", 100, "男");
 ? ? ? ?Role r2 = new Role("小五",100,"男");
 ? ? ? ?r1.showRoleInfo();
 ? ? ? ?r2.showRoleInfo();
// ? ? ?  r1.攻击(xw)方法的调用者攻击参数
 ? ? ? while (true){
 ? ? ? ? ? ?r1.attack(r2);
 ? ? ? ? ? ?if(r2.getBlood()==0){
 ? ? ? ? ? ? ? ?System.out.println(r1.getName()+"ko了"+r2.getName());
 ? ? ? ? ? ? ? ?break;
 ? ? ? ? ?  }
 ? ? ? ? ? ?r2.attack(r1);
 ? ? ? ? ? ?if(r1.getBlood()==0){
 ? ? ? ? ? ? ? ?System.out.println(r2.getName()+"ko了"+r1.getName());
 ? ? ? ? ? ? ? ?break;
 ? ? ? ? ?  }
 ? ? ?  }
 ?  }

(3)printf:

 public static void main(String[] args) {
 ? ? ? ?//两部分参数:
 ? ? ? ?//第一部分参数:要输出的内容%s(占位)
// ? ? ?  第二部分参数:填充的数据
 ? ? ? ?System.out.printf("你好啊%s","张三");
 ? ? ? ?System.out.println();
 ? ? ? ?System.out.printf("%s你好啊%s","张三","李四");
 ?  }

3.对象数组:

(1)例1:定义一个数组存储3个商品的对象。

商品的属性:商品的id,名字,价格,库存。

创建三个商品对象,并把商品对象存入2到数组中;

public static void main(String[] args) {
// ? ? ?  创建一个数组
 ? ? ? ?Goods[] arr = new Goods[3];
// ? ? ?  创建三个商品对象
 ? ? ? ?Goods g1 = new Goods("1","华为p40",5999.0,100);
 ? ? ? ?Goods g2 = new Goods("2","保温杯",227.0,50);
 ? ? ? ?Goods g3 = new Goods("3","枸杞",12.7,70);
// ? ? ?  把商品添加到数组中
 ? ? ? ?arr[0]=g1;
 ? ? ? ?arr[1]=g2;
 ? ? ? ?arr[2]=g3;
// ? ? ?  遍历
 ? ? ? ?for (int i = 0;i < arr.length; i++) {
 ? ? ? ? ? ?Goods goods=arr[i];
 ? ? ? ? ? ?System.out.println(goods.getId()+","+goods.getName()+","+goods.getPrice()+","+goods.getCount());
 ? ? ?  }
 ?  }

(2)例2:定义数组存储3部汽车对象;

汽车的属性:品牌、价格、颜色。

创建三个汽车对象,数据通过键盘录入而来,并把数据存入到数据当中。

public static void main(String[] args) {
 ? ? ? ?Car[] cars = new Car[3];
 ? ? ? ?Scanner sc = new Scanner(System.in);
// ? ? ?  注意:创建对象放在循环里面。否则在外面只会认为是仅一个对象,输入的结果会被最后输入的值覆盖,从而输出三次
 ? ? ? ?for (int i = 0; i < cars.length; i++) {
// ? ? ? ? ?  创建汽车对象
 ? ? ? ? ? ?Car c = new Car();
 ? ? ? ? ? ?System.out.println("请输入品牌,价格,颜色");
 ? ? ? ? ? ?String name=sc.next();
 ? ? ? ? ? ?c.setName(name);
 ? ? ? ? ? ?double price=sc.nextDouble();
 ? ? ? ? ? ?c.setPrice(price);
 ? ? ? ? ? ?String color=sc.next();
 ? ? ? ? ? ?c.setColor(color);
 ? ? ? ? ? ?cars[i]=c;
 ? ? ?  }
 ? ? ? ?for (int i = 0; i < cars.length; i++) {
 ? ? ? ? ? ?Car car = cars[i];
 ? ? ? ? ? ?System.out.println(car.getName()+" ,"+car.getPrice()+" ,"+car.getColor());
 ? ? ?  }
 ?  }

(3)例3:定义数组存储3部手机对象。

手机的属性:品牌,价格,颜色。

要求,计算出三部手机平均价格。

public static void main(String[] args) {
 ? ?Phone[] phones = new Phone[3];
 ? ?Phone c1 = new Phone("小米",599.0,"红色");
 ? ?Phone c2 = new Phone("华为",9999.0,"黑色");
 ? ?Phone c3 = new Phone("苹果",5999.0,"白色");
?
 ? ?phones[0]=c1;
 ? ?phones[1]=c2;
 ? ?phones[2]=c3;
?
 ? ?double price=0;
 ? ?for (int i = 0; i < phones.length; i++) {
 ? ? ? ?Phone phone = phones[i];
 ? ? ? ?price=price+phone.getPrice();
 ?  }
 ? ?System.out.println(price/ phones.length);
}

(4)例4:定义数组存储4个女朋友的对象,

女朋友属性:姓名、年龄、性别、爱好

要求1:计算出四女朋友的平均年龄

要求2:统计年龄比平均值低的女朋友有几个?并把她们的所有信息打印出来。

public static void main(String[] args) {
 ? ?/*
 ? ?要求1:计算出四女朋友的平均年龄
 ? ?要求2:统计年龄比平均值低的女朋友有几个?并把她们的所有信息打印出来。
 ? ?*/
 ? ?girlFriends[] gf = new girlFriends[4];
 ? ?girlFriends gf1 = new girlFriends("小时",23,"女","打麻将");
 ? ?girlFriends gf2 = new girlFriends("小虎",20,"女","旅游");
 ? ?girlFriends gf3 = new girlFriends("小妲",19,"女","玩游戏");
 ? ?girlFriends gf4 = new girlFriends("小商",28,"女","旅游");
 ? ?gf[0]=gf1;
 ? ?gf[1]=gf2;
 ? ?gf[2]=gf3;
 ? ?gf[3]=gf4;
 ? ?int age=0;
 ? ?for (int i = 0; i < gf.length; i++) {
 ? ? ? ?girlFriends girlFriends = gf[i];
 ? ? ? ?age+=girlFriends.getAge();
 ?  }
 ? ?int avg=age/gf.length;
 ? ?System.out.println(avg);
 ? ?int count=0;
 ? ?for (int i = 0; i < gf.length; i++) {
 ? ? ? ?girlFriends girlFriends = gf[i];
 ? ? ? ?if(girlFriends.getAge()<avg){
 ? ? ? ? ? ?count++;
 ? ? ? ? ? ?System.out.println(girlFriends.getName()+","+girlFriends.getAge()+","+girlFriends.getSex()+","+girlFriends.getLove());
 ? ? ?  }
 ?  }
 ? ?System.out.println(count);
}

(5)例5:定义一个长度为3的数组,数组存储1~3名学生对象作为初始化数据,学生对象的学号,姓名各个不相同。

学生的属性:学号、姓名、年龄;

要求1:再添加一个学生对象,并在添加的时候进行学号的唯一性;

要求2:添加完成后,遍历所有学生信息;

public static void main(String[] args) {
 ? ? ? ?/*
 ? ? ? ?要求1:再添加一个学生对象,并在添加的时候进行学号的唯一性;
 ? ? ? ?要求2:添加完成后,遍历所有学生信息;
 ? ? ? ?*/
 ? ? ? ?Student[] students = new Student[3];
 ? ? ? ?Student s1 = new Student(110, "dhh", 18);
 ? ? ? ?Student s2 = new Student(121, "xdd", 28);
 ? ? ? ?Student s3 = new Student(212, "css", 24);
 ? ? ? ?students[0] = s1;
 ? ? ? ?students[1] = s2;
 ? ? ? ?students[2] = s3;
// ? ? ?  要求1:再添加一个学生对象,并在添加的时候进行学号的唯一性;
// ? ? ?  新建一个学生对象
 ? ? ? ?Student s4 = new Student(210, "dff", 21);
// ? ? ?  判断学号是否唯一,唯一则添加,不唯一不用添加
 ? ? ? ?boolean flag = contains(students, s4.getSno());
 ? ? ? ?if(flag){
// ? ? ? ? ?  已存在,不用添加
 ? ? ? ? ? ?System.out.println("当前sno重复,请修改sno后再进行添加");
 ? ? ?  }else {
// ? ? ? ? ?  不存在--就可以添加进数组
// ? ? ?  添加入数组:数组没满直接添加
// ? ? ?  数组满了,在原来的数组长度+1
 ? ? ? ? ? ?int count = count(students);
 ? ? ? ? ? ?if(count==students.length){
// ? ? ? ? ? ? ?  已存满
 ? ? ? ? ? ? ? ?Student[] newStu = creat(students);
 ? ? ? ? ? ? ? ?newStu[count]=s4;
 ? ? ? ? ? ? ? ?printStu(newStu);
 ? ? ? ? ?  }else {
// ? ? ? ? ? ? ?  没有存满
// ? ? ? ? ? ? ?  [s1,s2,null]方法count获取到2,表示数组当中已经有2个元素
// ? ? ? ? ? ? ?  还有一层意思:如果下一次要添加数据,就是添加到2索引的位置
 ? ? ? ? ? ? ? ?students[count]=s4;
 ? ? ? ? ? ? ? ?printStu(students);
?
 ? ? ? ? ?  }
 ? ? ?  }
 ?  }
 ? ?public static void printStu(Student[] students){
 ? ? ? ?for (int i = 0; i < students.length; i++) {
 ? ? ? ? ? ?Student stu = students[i];
 ? ? ? ? ? ?if(students[i]!=null){
 ? ? ? ? ? ? ? ?System.out.println(stu.getSno()+","+stu.getName()+","+stu.getAge()+",");
 ? ? ? ? ?  }
 ? ? ?  }
 ?  }
?
// ?  创建一个新数组,长度=老数组的长度+1
// ?  然后把老数组的元素,拷贝到新数组当中
 ? ?public static Student[] creat(Student[] students){
 ? ? ? ?Student[] stu1 = new Student[students.length+1];
// ? ? ?  循环得到老数组中的每一个元素
 ? ? ? ?for (int i = 0; i < students.length; i++) {
 ? ? ? ? ? ?stu1[i]=students[i];
 ? ? ?  }
 ? ? ? ?return stu1;
 ?  }
?
 ? ?public static int count(Student[] students){
 ? ? ? ?int count=0;
 ? ? ? ?for (int i = 0; i < students.length; i++) {
 ? ? ? ? ? ?if(students[i]!=null){
 ? ? ? ? ? ? ? ?count++;
 ? ? ? ? ?  }
 ? ? ?  }
 ? ? ? ?return count;
 ?  }
?
 ? ?// ?  1:我要干嘛? 唯一性判断
// ?  2:我干这件事情需要什么才能完成? 数组,id
// ?  3:调用处是否需要继续使用方法的结果? 是
 ? ?public static boolean contains(Student[] students, int sno) {
 ? ? ? ?for (int i = 0; i < students.length; i++) {
 ? ? ? ? ? ?Student stu = students[i];
 ? ? ? ? ? ?if(stu!=null){
 ? ? ? ? ? ? ? ?if (stu.getSno() == sno) {
 ? ? ? ? ? ? ? ? ? ?return true;
 ? ? ? ? ? ? ?  }
 ? ? ? ? ?  }
 ? ? ?  }
 ? ? ? ?return false;
 ?  }

要求3:通过id删除学生信息,如果存在,则删除,如果不存在,则提示删除失败。

要求4:删除完毕后,遍历所有学生信息;

public static void main(String[] args) {
 ? ? ? /*
 ? ? ? ?要求3:通过id删除学生信息,如果存在,则删除,如果不存在,则提示删除失败。
 ? ? ? ?要求4:删除完毕后,遍历所有学生信息;
 ? ? ? ?*/
 ? ? ? ?Student[] stu = new Student[3];
 ? ? ? ?Student s1 = new Student(1, "zs", 18);
 ? ? ? ?Student s2 = new Student(2, "ls", 28);
 ? ? ? ?Student s3 = new Student(3, "ww", 24);
 ? ? ? ?stu[0]=s1;
 ? ? ? ?stu[1]=s2;
 ? ? ? ?stu[2]=s3;
// ? ? ? ? 要求3:通过id删除学生信息,如果存在,则删除,如果不存在,则提示删除失败。
 ? ? ? ?Scanner sc = new Scanner(System.in);
 ? ? ? ?System.out.println("请输入您要删除的学号:");
 ? ? ? ?int id= sc.nextInt();
 ? ? ? ?int index = index(stu,id);
 ? ? ? ?if(index>=0){
 ? ? ? ? ? ?stu[index]=null;
 ? ? ? ? ? ?printStu(stu);
 ? ? ?  }else {
 ? ? ? ? ? ?System.out.println("该学号不存在!");
 ? ? ?  }
 ?  }
 ? ?public static void printStu( Student[] stu) {
 ? ? ? ?for (int i = 0; i < stu.length; i++) {
 ? ? ? ? ? ?Student s = stu[i];
 ? ? ? ? ? ?if(s!=null){
 ? ? ? ? ? ? ? ?System.out.println(s.getSno()+","+s.getName()+","+s.getAge());
 ? ? ? ? ?  }
 ? ? ?  }
 ?  }
 ? ?public static int index( Student[] stu,int id) {
 ? ? ? ?for (int i = 0; i < stu.length; i++) {
 ? ? ? ? ? ?Student s = stu[i];
 ? ? ? ? ? ?if (s!= null) {
 ? ? ? ? ? ? ? ?int sno = s.getSno();
 ? ? ? ? ? ? ? ?if (sno==id) {
 ? ? ? ? ? ? ? ? ? ?return i;
 ? ? ? ? ? ? ?  }
 ? ? ? ? ?  }
 ? ? ?  }
 ? ? ? ?return -1;
 ?  }

要求5:查询数组id为“212”学生,如果存在,则将他的年龄+1;

public static void main(String[] args) {
 ? /*
 ? ?要求5:查询数组id为“212”学生,如果存在,则将他的年龄+1;
 ? ?*/
 ? ?Student[] stu = new Student[3];
 ? ?Student s1 = new Student(1, "zs", 18);
 ? ?Student s2 = new Student(2, "ls", 28);
 ? ?Student s3 = new Student(3, "ww", 24);
 ? ?stu[0]=s1;
 ? ?stu[1]=s2;
 ? ?stu[2]=s3;
 ? ?Scanner sc = new Scanner(System.in);
 ? ?System.out.println("请输入您的学号:");
 ? ?int id= sc.nextInt();
 ? ?int index = index(stu,id);
 ? ?if(index>=0){
 ? ? ? ?stu[index].setAge(stu[index].getAge()+1);
 ? ? ? ?printStu(stu);
 ?  }else {
 ? ? ? ?System.out.println("该学号不存在!");
 ?  }
}
public static void printStu( Student[] stu) {
 ? ?for (int i = 0; i < stu.length; i++) {
 ? ? ? ?Student s = stu[i];
 ? ? ? ?if(s!=null){
 ? ? ? ? ? ?System.out.println(s.getSno()+","+s.getName()+","+s.getAge());
 ? ? ?  }
 ?  }
}
public static int index( Student[] stu,int id) {
 ? ?for (int i = 0; i < stu.length; i++) {
 ? ? ? ?Student s = stu[i];
 ? ? ? ?if (s!= null) {
 ? ? ? ? ? ?int sno = s.getSno();
 ? ? ? ? ? ?if (sno==id) {
 ? ? ? ? ? ? ? ?return i;
 ? ? ? ? ?  }
 ? ? ?  }
 ?  }
 ? ?return -1;
}

文章来源:https://blog.csdn.net/m0_70078527/article/details/135746541
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。