面向对象综合习题

该文档展示了如何使用Java实现一个文字版格斗游戏,涉及角色类的创建,包括属性如姓名、血量等,并实现了战斗逻辑。同时,通过对象数组创建和操作商品,包括商品ID、名称、价格和库存。此外,还涵盖了汽车和手机对象数组的创建,以及计算平均价格。最后,探讨了女朋友和学生对象数组,涉及唯一性判断、信息删除与修改等操作。
摘要由CSDN通过智能技术生成

目录:


文字版格斗游(回合制)

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


思路:

  1. 创建一个Role(角色)类,分别定义名字,血量,性别,等私有变量
  2. 定义一个空参构造体
  3. 定义一个含有全部参数的构造体
  4. 再分别给私有变量定义set和get方法
  5. (1.2.3.4步是创建javabean)
  6. 准备工作都做完了,接下来定义一个flight(战斗)方法,在flight中要有 调用flight方法的人给敌人随机造成了多少伤害,敌人还剩多少血量,敌人血量低于0会怎样。
  7. 在main()方法中分别用Role创建两个角色并附上初始值
  8. 接下来角色调用flight方法开始战斗
  9. 当己方或敌方血量为则游戏结束

javabean类如下,main()在下面:

package mianXiangDuiXiang.SheJiDuiXiang.ZhongHeAnLi;

import java.util.Random;

public class Role {
    private String name;
    private int blood;
    private String gender;
    private String face;//长相随机
    //face
    String[] boyface = {"风流俊雅", "气宇轩昂", "相貌英俊", "五官端正", "一塌糊涂", "面目狰狞"};
    String[] girlface = {"美艳绝伦", "沉鱼落雁", "亭亭玉立", "身材姣好", "相貌平平", "惨不忍睹"};
    //attach 攻击描述
    String[] attacks_desc = {
            "%s使出了一招【直捣黄龙】,蹲到对方胯下,一爪向%s的命根抓去",
            "%s使出了一招【黯然幽魂掌】,大臂一挥,一掌向%s的脸坝子拍去"
    };
    //injured 受伤的描述
    String[] injured_desc = {
            "结果%s退了半步,毫发无伤",
            "结果给%s打的退了几步",
            "结果%s痛的哇哇大叫",
            "结果%s像烂泥一样倒下"
    };

    //空参
    public Role() {

    }

    //全参
    public Role(String name, int blood, String gender) {
        this.name = name;
        this.blood = blood;
        this.gender = gender;
        //this.face = face;  开局随机长相所以用this.facehi直接赋值固定长相,直接调用setFace
        setFace(gender);
    }

    //set 和 get  方法  先赋值再返回
    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setBlood(int blood) {
        this.blood = blood;
    }

    public int getBlood() {
        return blood;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getGender() {
        return gender;
    }

    public void setFace(String gender) {
        Random r = new Random();
        if (gender == "男") {
            int x = r.nextInt(boyface.length);
            this.face = boyface[x];
        } else if (gender == "女") {
            int y = r.nextInt(girlface.length);
            this.face = girlface[y];
        } else
            System.out.println("卧槽,人妖,run!!!");
    }

    public String getFace() {
        return face;
    }

    //定义一个方法用于攻击别人
    //思考:谁攻击谁
    //Role r1 = new Role();
    //Role r2 = new Role();
    //r1.攻击(r2);
    public void flight(Role role) {
        //使出一个攻击的效果
        Random r = new Random();
        int indexA = r.nextInt(attacks_desc.length);
        String KungFu = attacks_desc[indexA];
        System.out.printf(KungFu, this.getName(), role.getName());
        //this表示方法的调用者
        //用随机数编写造成了多少血量
        int hurt = r.nextInt(11) + 20;   //20-30
        int remainBlood = role.getBlood() - hurt;
        //对剩余血量进行验证,如果是负数就修改为0
        remainBlood = remainBlood < 0 ? 0 : remainBlood;
        //修改一下挨揍人的血量
        role.setBlood(remainBlood);
        //受伤描述
        //如果血量>90  就采用0索引
        //   60 -- 90  就采用1索引
        //   30 --  60 就采用2索引
        //   0  --  30       3索引
        if (remainBlood > 90) {
            System.out.printf(injured_desc[0], role.getName());
            System.out.println();        //println本身就有换行
        } else if (remainBlood > 60) {
            System.out.printf(injured_desc[1], role.getName());
            System.out.println();
        } else if (remainBlood > 30) {
            System.out.printf(injured_desc[2], role.getName());
            System.out.println();
        } else {
            System.out.printf(injured_desc[3], role.getName());
            System.out.println();
        }


       /*
        String ShouShang = injured_desc[indexJ];
        System.out.printf(ShouShang,role.getName());*/

    }
}

主方法:

package mianXiangDuiXiang.SheJiDuiXiang.ZhongHeAnLi;

public class RoleTest {
    public static void main(String[] args) {
        //创建第一个角色
        Role r1 = new Role("奥特曼",100,"男");
        //创建第二个角色
        Role r2 = new Role("小可爱",100,"女");
        //开始战斗  回合制游戏
        while (true){
            //1.r1开始攻击r2
            r1.flight(r2);
            //判断r2还剩多少血量  如果r2血量变为0,游戏停止
            if(r2.getBlood() == 0){
                System.out.println(r1.getName()+"k.0"+r2.getName());
                break;
            }
            //r2开始攻击r1
            r2.flight(r1);
            if(r1.getBlood()==0){
                System.out.println(r2.getName()+"k.o"+r1.getName());
                break;
            }
        }
    }

}

返回目录


对象数组练习

对象数组1:

定义数组存储3个商品对象。
商品的属性:商品的id,名字,价格,库存
创建三个商品对象,并把商品对象存入到数组当中

思路:首相窗创建Goods的javabean类,再去main()里创建数组存放商品

package mianXiangDuiXiang.SheJiDuiXiang.ZhongHeAnLi;
//创建一个Goods的javabean
public class Goods {
    private String id;
    private String name;
    private double price;
    private int stock;


    public Goods() {
    }

    public Goods(String id, String name, double price, int stock) {
        this.id = id;
        this.name = name;
        this.price = price;
        this.stock = stock;
    }

    /**
     * 获取
     * @return id
     */
    public String getId() {
        return id;
    }

    /**
     * 设置
     * @param id
     */
    public void setId(String id) {
        this.id = id;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return price
     */
    public double getPrice() {
        return price;
    }

    /**
     * 设置
     * @param price
     */
    public void setPrice(double price) {
        this.price = price;
    }

    /**
     * 获取
     * @return stock
     */
    public int getStock() {
        return stock;
    }

    /**
     * 设置
     * @param stock
     */
    public void setStock(int stock) {
        this.stock = stock;
    }


}

package mianXiangDuiXiang.SheJiDuiXiang.ZhongHeAnLi;

public class GoodsTest {
    public static void main(String[] args){
        //int[] arr = new int[3];  int类型的数组只能放整形的数
        //1.创建数组
        Goods[] arr = new Goods[3];//装商品的数组,类型就得是定义好的Goods类

        //2.创建三个商品对象  ctrl+p 可以看形参顺序
        Goods g1 = new Goods("001","苹果10",3999,10000);
        Goods g2 = new Goods("002","苹果11",4999,1000);
        Goods g3 = new Goods("003","苹果12",6999,100);

        //将商品对象存入到数组中
        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.getStock());
        }
        }
}

返回目录


对象数组2(加大难度):

需求:
定义数组存储3部汽车对象。
汽车的属性:品牌,价格,颜色。
创建三个汽车对象,数据通过键盘录入而来,并把数据存入到数组当中。


创建Cars的javabean:

package mianXiangDuiXiang.SheJiDuiXiang.ZhongHeAnLi;

public class Cars {
    //1.先定义Cars的私有变量
    private String band;
    private double price;
    private String color;

    //2.定义空参
    public Cars(){}
    //3.定义全参构造器
    public Cars(String band,double price,String color){
        this.band = band;
        this.price = price;
        this.color = color;
    }
    //4.写set和get方法
    public void setBand(String band){
        this.band = band;
    }
    public String getBand(){
        return band;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }
}

键盘录入:

package mianXiangDuiXiang.SheJiDuiXiang.ZhongHeAnLi;

import java.util.Scanner;

public class CarsTest {
    public static void main(String[] args) {
        //5.创建数组存放小汽车
        Cars[] arr = new Cars[3];
        //录入数据有两套体系:第一套体系   
        /* nextInt();     接收整数
           nextDouble();  接收小数
           next();       接收字符串
           这套体系遇到空格,遇到制表符,回车就会停止接收数据
           如果你定义了两个输入语句  你在第一次输入  123空格123
           则会将123赋值给第一个数 剩下的123直接赋值给第二个数不会有提示信息*/
        //                  第二套体系
        //nextLine();     接收字符串  同上如果输入  123 123  则会全部赋值给第一个数 包括空格
        //6.new出小汽车 数据通过键盘录入而来   7.存入数组
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < arr.length; i++) {
            Cars car = new Cars();
            System.out.println("请录入汽车的品牌:");
            String brand = sc.next();
            car.setBand(brand);
            System.out.println("请录入汽车的价格:");
            Double price = sc.nextDouble();
            car.setPrice(price);
            System.out.println("请录入汽车的颜色·:");
            String color = sc.next();
            car.setColor(color);
            arr[i] = car ;  //将小汽车的所有数据直接装入数组
        }
        //遍历数组
        for (int i = 0; i < arr.length; i++) {
            Cars cars = arr[i];
            System.out.println(cars.getBand()+","+cars.getPrice()+","+cars.getColor());
        }

    }
}

返回目录


对象数组3

需求:定义数组存储3部手机对象。
手机的属性:品牌,价格,颜色。
要求,计算出三部手机的平均价格

手机javabean

package mianXiangDuiXiang.SheJiDuiXiang.ZhongHeAnLi;

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;
    }

    public void setBrand(String brand){
        this.brand = brand;
    }
    public String getBrand(){
        return brand;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }


}

main()方法:

package mianXiangDuiXiang.SheJiDuiXiang.ZhongHeAnLi;

public class PhoneTest {
    public static void main(String[] args){
        //定义数组存储3部手机
        Phone[] arr = new Phone[3];
        //创建3台手机
        Phone p1 = new Phone("苹果11",1999,"白色");
        Phone p2 = new Phone("苹果12",4999,"黑色");
        Phone p3 = new Phone("苹果13",3999,"玫瑰金色");
        //把手机放到数组里
        arr[0] = p1;
        arr[1] = p2;
        arr[2] = p3;
        int sumPrice = 0;
        //获取3部手机的平均价格
        for (int i = 0; i < arr.length; i++) {
            sumPrice = sumPrice + arr[i].getPrice();
        }
        double phoneAvg = sumPrice*1.0/arr.length;
        System.out.printf("%.2f",phoneAvg);
    }
}

返回目录


对象数组4

需求:定义数组存储4个女朋友对象
女朋友的属性:姓名,年龄,性别,爱好
要求1:计算出四个女朋友的平均年龄
要求2:统计年龄比平均值低的女朋友有几个?并把他们的所有信息打印出来


javabean类在下边

package mianXiangDuiXiang.SheJiDuiXiang.ZhongHeAnLi;

public class GirlFriendTest {
    public static void main(String[] args) {
        //定义数组 存四个女朋友
        GirlFriend[] arr = new GirlFriend[4];
        //创4个女朋友
        GirlFriend g1 = new GirlFriend("小可爱1",18,'女',"画画");
        GirlFriend g2 = new GirlFriend("小可爱2",19,'女',"买菜");
        GirlFriend g3 = new GirlFriend("小可爱3",20,'女',"吃");
        GirlFriend g4 = new GirlFriend("小可爱4",21,'女',"睡觉");
        //装入数组
        arr[0] = g1;
        arr[1] = g2;
        arr[2] = g3;
        arr[3] = g4;

        //获取年纪总和 并 求出平均值
        int sumAge=0;
        for (int i = 0; i < arr.length; i++) {
            sumAge = sumAge + arr[i].getAge();
        }
        double avg = sumAge*1.0/arr.length;
        int count = 0;
        for (int i = 0; i < arr.length; i++) {
            if(arr[i].getAge()<avg)
                count++;
        }
        System.out.println(count);
        for (int i = 0; i < arr.length; i++) {
            if(arr[i].getAge()<avg)
                System.out.println(arr[i].getName()+" "+arr[i].getAge()+" "+arr[i].getGender()+" "+arr[i].getHoby());;
        }
    }
}

package mianXiangDuiXiang.SheJiDuiXiang.ZhongHeAnLi;

public class GirlFriend {
    private String name;
    private int age;
    private char gender;
    private String hoby;

    public GirlFriend(){}

    public GirlFriend(String name,int age,char gender,String hoby){
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.hoby = hoby;
    }

    public void setName(String name){
        this.name = name;
    }
    public String getName(){
        return name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public char getGender() {
        return gender;
    }

    public void setGender(char gender) {
        this.gender = gender;
    }

    public String getHoby() {
        return hoby;
    }

    public void setHoby(String hoby) {
        this.hoby = hoby;
    }
}

返回目录


对象数组5

需求:定义一个长度为3的数组,数组存储1~3名学生对象作为初始数据,学生对象的学号,姓名各不相同。
学生的属性:学号,姓名,年龄。
要求1:再次添加一个学生对象,并在添加的时候进行学号的唯一性判断。
要求2:添加完毕之后,遍历所有学生信息。
要求3:通过id删除学生信息
             如果存在,则删除,如果不存在,则提示删除失败。
要求4:删除完毕之后,遍历所有学生的信息
要求5:查询数组id为”002“的学生,如果存在,则将他的年龄+1岁


package mianXiangDuiXiang.SheJiDuiXiang.ZhongHeAnLi;

public class StudentTest {
    public static void main(String[] args) {
        //功能不完善,使用其中一个功能必须将其他功能注释
        //定义一个长度为3的数组
        Student[] arr = new Student[3];
        //new3个学生存数组里
        Student s1 = new Student(1, "王刚", 21);
        Student s2 = new Student(2, "王芳", 20);
        Student s3 = new Student(3, "王磊", 22);
        arr[0] = s1;
        arr[1] = s2;
        arr[2] = s3;

        //要求1:添加学生对象,并在添加的时候进行学号的唯一性判断
        Student s4 = new Student(4, "王爽", 22);
        //1.老数组已经满了---只能创建一个新的数组,新的数组长度 = 老数组长度 + 1
        //2.数组未存满直接添加
        //3.唯一性判断,id不可以重复,存在--不可以添加,不存在--直接添加
        boolean flag = contains(arr, s4.getId());
        if (flag) {
            System.out.println("当前id重复,请修改id后进行添加");
        } else {
            //定义方法判断数组已经存了几个元素
            int result = getCount(arr);
            if(result == arr.length){
                //老数组已经满了---只能创建一个新的数组,新的数组长度 = 老数组长度 + 1
                //创建一个方法写  全写这里太乱了
                Student[] newArr = creatNewArr(arr);
                newArr[arr.length] = s4;
                print(newArr);

            }else {
                //没存满  直接放进去  得到的result 是数组中一共有几个元素
                //result也代表我下次要存放数据的索引   你细品
                arr[result] = s4;
                print(arr);
            }
            //最后遍历所有的信息
        }



            //要求3:根据id删除学生信息
        //1.找到id对应的索引
        int index1 = getIndex(arr,1);
        System.out.println(index1);
        //如果存在就删除,不存在就给提示
        if(index1 >= 0) {
            //存在   把要删除的索引变成null就ok了
            arr[index1] = null;
            //删除之后遍历数组
            print(arr);
        } else {
            System.out.println("删除失败,当前索引不存在");
        }



        
        //要求5:查询数组中id为 002 的学生如果存在 ,年龄+1
        int index2 = getIndex(arr,2);
        //如果存在 年龄+1 并 输出  否则报错
        if(index2 >= 0){
            Student stu = arr[index2];
            int newAge = stu.getAge()+1;
            //把+1之后的数存进数组
            stu.setAge(newAge);
            //成功之后 调用方法 遍历数组
            print(arr);
        }else {
            System.out.println("当前id不存在,年龄修改失败");
        }
    }



    //方法:


    //1.找到id对应的索引  要把数组传进去   id传进去
    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;
                }
            }
        }
        //当判断结束之后还没找到要删除对应的索引,就返回当前删除id不存在
        return -1;
    }
    //遍历数组
    public static void print(Student[] arr){
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]!=null)
                System.out.println(arr[i].getId()+" "+arr[i].getName()+" "+arr[i].getAge());
        }
    }

    public static boolean contains(Student[] arr, int id) {
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] != null) {
                if (id == arr[i].getId())
                    return true;
            }

        }
        return false;
    }

    //定义一个新方法
    public static int getCount(Student[] arr) {
        //对arr【i】做一个非空判断  如果不为空则count++
        int count = 0;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] != null)
                count++;
        }
        return count;
    }

    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;
    }
}

javabean:

package mianXiangDuiXiang.SheJiDuiXiang.ZhongHeAnLi;

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;
    }
    public void setId(int id){
        this.id = id;
    }
    public int getId(){
        return id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

返回目录


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值