初学JavaDay14——对象与类习题(1)

初学JavaDay14——对象与类习题(1)

1.

题目

求圆的面积、周长以及两个圆的的距离;

解题思路:

这里最重要的是理解面向对象的解题思路,这个应该程序包括两个类。其中第一个类Dome02 是主类。它的唯一目的就是测试第二个类 Circle。使用这样的类的程序通常称为该类的客户。运行这个程序时,Java 运行系统会调用这个主类的 main 方法。

代码示例:

//主类
class Demo02{
    public static void main(String[] args){
        Circle c1=new Circle();//创建名为c1的circle类
        c1.radius=10;
        Point o1=new Point();
        o1.x=0;
        o1.y=0;
        c1.o=o1;
        
        Circle c2=new Circle();
        c2.radius=10;
        Point o2=new Point();
        o2.x=10;
        o2.y=10;
        c2.o=o2;

        System.out.println(c1.getDistance(c2));
        //return;
    }
}
/**
定义一个圆的类
@author HENG
@version 1.0
 */
class Circle{
    public double radius;
    public double pi=Math.PI;
    public Point o;

    /**
    计算圆的面积
    @return area
     */
    public double getArea(){
        double area=pi*radius*radius;
        return area;
    }

    /**
    计算圆的周长
    @return perimeter
     */
    public double getPerimeter(){
        double perimeter=2*pi*radius;
        return perimeter;
    }

    /**
    计算当前圆到其他圆的距离
    @param c 另外一个圆对象
    @return distance 两个圆之间的距离
     */
    public double getDistance(Circle c){
        double distance=this.o.getDistance(c.o);
        return distance;
    }
}
class Point{
    public double x;
    public double y;
    public double getDistance(Point p){
        return Math.sqrt(Math.pow(this.x-p.x,2)+Math.pow(this.y-p.y,2));
    }
}

2.

题目:

一个关于枪战的模拟

解题思路:

这个问题主要还是将整个过程分为四个部分——玩家,枪,弹夹,子弹,然后分别写出四个部分,并通过主类将四个部分连接起来,其中难点就是需要理解各个部分的逻辑关系。以下是UML图:

初学JavaDay14——对象与类习题(1)_第1张图片

代码详解:

1.主类代码(GunWar):

/**
 * 主程序
 * 创建用户
 *  执行步骤
 */
class GunWar{
    public static void main(String[] args) {
    //创建玩家
        Player p1=new Player("老张",100);
        Player p2=new Player("老王",100);
        p1.shoot(p2);

        Gun gun=new Gun();
        p1.takeGun(gun);
        p1.shoot(p2);

        Clip clip=new Clip();
        p1.loadClip(clip);
        p1.shoot(p2);
        System.out.println("=========");
        for(int i=1;i<=40;i++){
            clip.putBullet(new Bullet());
        }
        System.out.println("=========");
        for(int i=1;i<=11;i++){
            p1.shoot(p2);
        }    
    }
}

2.玩家代码(player):

/**
 * 玩家
 * 属性:
 * 名字(name) HP 枪(gun)
 * 行为:
 * 拿枪takeGun  装弹夹loadClip   射击shoot  受到伤害bloodLoss
 */
class Player{
    private String  name;
    private int HP;
    private Gun gun;
/**
 创建一个玩家
 */
    public Player(String name,int HP){
        this.name=name;
        this.HP=HP;
        this.gun=null;
        System.out.println(this.name+"诞生,他的HP为"+this.HP);
    }
    /**
     * 拿枪
     */
    public void takeGun(Gun gun){
        if(gun==null){
            System.out.println("玩家"+name+"手上还没有枪");
        }else{
            System.out.println("玩家"+name+"获取了一把枪");
        }
    }
    /**
     * 玩家手上弹夹的状态
     * @param clip
     */
    public void loadClip(Clip clip){
        if(this.gun==null){
            System.out.println("玩家"+name+"没有枪,装不了弹夹");
        }else{
            System.out.println("玩家"+name+"已经装上了弹夹");
            this.gun.loadClip(clip);
        }
    }
    /**
     射击
    */
    public void shoot(Player enemy){
        if(this.gun==null){
            System.out.println("玩家"+name+"没有枪,无法向"+enemy.getName()+"射击");
        }else{
            System.out.println("玩家"+name+"向玩家"+enemy.getName()+"开了一枪");
            this.gun.fire(enemy);
        }
    }
    public void booldLose(int damage){
        if(this.HP>damage){
            this.HP-=damage;
            System.out.println("玩家"+name+"收到伤害"+damage+",剩余"+this.HP+"血量");
        }else{
            System.out.println("玩家"+name+"已死亡");
        }
    }
    public String getName(){
        return this.name;
    }
}

3.枪代码(gun):

/**
 * 枪
 * 属性:
 * clip
 * 行为:
 * 开火fire 装弹
 */
class Gun{
    private Clip clip;

    public void loadClip(Clip clip){
        this.clip=clip;
        System.out.println("枪装上了弹夹");
    }
    public void fire(Player enemy){
        if(clip==null){
            System.out.println("弹夹没有子弹,空响");
        }else{
            //先获取弹夹里面的子弹数
            Bullet bullet=clip.getBullet();
            if(bullet!=null){
                System.out.println("枪向"+enemy.getName()+"发射了一颗子弹");
                bullet.hit(enemy);
            }else{
                System.out.println("放了个空枪");
            }            
        }
    }
}

4.弹夹代码(clip):

* 属性:
 * 子弹bullets 弹夹容量
 * 行为
 * 装弹 出弹
 */
class Clip{
    private Bullet[] bullets;
    private int size;

    public Clip(){
        this.bullets=new Bullet[30];//子弹容量
        this.size=0;
    }
    /**
     * 输出子弹
     * @return
     */
    public Bullet getBullet(){
        if(size==0){
            System.out.println("弹夹为空");
            return null;
        }else{
            Bullet bullet=bullets[size-1];
            size--;
            System.out.println("弹夹剩余"+size+"/"+bullets.length);
        }
    }
    /**
     * 装子弹
     * @param bullet
     */
    public void putBullet(Bullet bullet){
        if(size==bullets.length){
            System.out.println("弹夹已满");
        }else{
            bullets[size]=bullet;
            size++;
            System.out.println("弹夹剩余"+size+"/"+bullets.length);
        }
    }
}

5.子弹代码(bullet):

/**
 * 子弹
 * 属性: 伤害值damage 
 * 行为:击中hit
 */
class Bullet{
    private int damage=30;
    public void hit(Player enemge){
        System.out.println("一个子弹击中了"+enemge);
        enemge.booldLose(damage);
    }
}

 

 

 

 

你可能感兴趣的:(java基础)