【Java17】练习题


1.玩家选择角色

package com.atguigu.homework.test03;
import java.util.Scanner;
/*
* 1.定义接口FightAble:
     抽象方法:specialFight。
     默认方法:commonFight,方法中打印"普通打击"。

* 2.定义战士类:
     实现FightAble接口,重写方法中打印"武器攻击"。

* 3.定义法师类Mage:
     实现FightAble接口,重写方法中打印"法术攻击"。

* 4.定义玩家类Player:
     静态方法:FightAble select(String str),根据指令选择角色。
        法力角色,选择法师。
        武力角色,选择战士。
*/
public class Test03 {
    
    
	public static void main(String[] args) {
    
    
		Scanner input = new Scanner(System.in);
		System.out.print("选择:");
		String role = input.next();	
			
		FightAble f = Player.select(role); //Player.select(role)返回new Mage(),Mage类里重写了specialFight()方法
		f.specialFight();
		f.commonFight();
	}
}

//1111111111111111111111111111111111111111111111111111111111111111111111
interface FightAble{
    
    
	void specialFight();
	public default void commonFight(){
    
    
		System.out.println("普通打击");
	}
}
class Soldier implements FightAble{
    
    
	@Override
	public void specialFight() {
    
    
		System.out.println("武器攻击");
	}	
}
class Mage implements FightAble{
    
    
	@Override
	public void specialFight() {
    
    
		System.out.println("法术攻击");
	}	
}
class Player{
    
    
	public static FightAble select(String str){
    
    
		if("法力角色".equals(str)){
    
    
			return new Mage(); //com.itheima.demo01.Mage@610455d6
		}else if("武力角色".equals(str)){
    
    
			return new Soldier();
		}
		return null; //函数不是void要有返回值
	}
}

在这里插入图片描述

2.人工挑苹果

在这里插入图片描述

package com.atguigu.homework.test04;

public class Apple {
    
    
	private double size;
	private String color;
	public Apple(double size, String color) {
    
    
		super();
		this.size = size;
		this.color = color;
	}
	public Apple() {
    
    
		super();
	}
	public double getSize() {
    
    
		return size;
	}
	public void setSize(double size) {
    
    
		this.size = size;
	}
	public String getColor() {
    
    
		return color;
	}
	public void setColor(String color) {
    
    
		this.color = color;
	}
	@Override
	public String toString() {
    
    
		return size + "-" + color;
	}	
}
package com.atguigu.homework.test04;

public interface CompareAble {
    
    
	//定义默认方法compare,挑选较大苹果。
	public default void compare(Apple a1, Apple a2){
    
    
		if(a1.getSize() > a2.getSize()){
    
    
			System.out.println(a1);
		}else{
    
    
			System.out.println(a2);
		}
	}
}
package com.atguigu.homework.test04;

public class CompareBig implements CompareAble{
    
    //CompareAble接口有默认方法就是挑较大苹果
}
package com.atguigu.homework.test04;

public class CompareColor implements CompareAble{
    
     //挑红色
	public void compare(Apple a1, Apple a2){
    
    
		if("红色".equals(a1.getColor())){
    
    
			System.out.println(a1);
		}
		if("红色".equals(a2.getColor())){
    
    
			System.out.println(a2);
		}
	}
}
package com.atguigu.homework.test04;

//工人类挑选苹果public void pickApple(CompareAble c,Apple a1,Apple a2)。
public class Worker {
    
    
	public void pickApple(CompareAble c,Apple a1,Apple a2){
    
    
		c.compare(a1, a2);
	}
}
package com.atguigu.homework.test04;

public class Test04 {
    
    
	public static void main(String[] args) {
    
    
		Worker w = new Worker();
		Apple a1 = new Apple(5.0, "青色");
		Apple a2 = new Apple(3.0, "红色");
		
		CompareBig cb = new CompareBig();
		w.pickApple(cb, a1, a2); //工人挑大苹果
			
		CompareColor cc = new CompareColor();
		w.pickApple(cc, a1, a2); //工人挑红苹果
	}
}

在这里插入图片描述
将上面改为匿名内部类实现接口来代替CompareBig和CompareColor就不用单独写两个实现类了。自己定义的,不是able to。比较大小同理。
在这里插入图片描述

3.员工类接口

package com.atguigu.test06.exer;
/*
(1)声明一个员工类Employee,有属性:编号、姓名、年龄、薪资
(2)让Employee员工类实现java.lang.Comparable接口,重写抽象方法,按照编号从小到大排序
*/
public class Employee implements Comparable{
    
    	
	private int id;
	private String name;
	private int age;
	private double salary;
	public Employee(int id, String name, int age, double salary) {
    
    
		super();
		this.id = id;
		this.name = name;
		this.age = age;
		this.salary = salary;
	}
	public Employee() {
    
    
		super();
	}
	public int getId() {
    
    
		return id;
	}
	public void setId(int id) {
    
    
		this.id = 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;
	}
	public double getSalary() {
    
    
		return salary;
	}
	public void setSalary(double salary) {
    
    
		this.salary = salary;
	}
	@Override
	public String toString() {
    
    
		return "Employee [id=" + id + ", name=" + name + ", age=" + age + ", salary=" + salary + "]";
	}	
	//重写抽象方法,按照编号从小到大排序
	@Override
	public int compareTo(Object o) {
    
    
		return this.id - ((Employee)o).id;
	}	
}
package com.atguigu.test06.exer;
import java.util.Comparator;
/*
 * (4)声明SalaryComparator类,实现java.util.Comparator接口,
		重写抽象方法,按照薪资从高到低排序
 */
public class SalaryComparator implements Comparator {
    
    
	@Override
	public int compare(Object o1, Object o2) {
    
    
		Employee e1 = (Employee) o1;
		Employee e2 = (Employee) o2;		
		if(e1.getSalary() > e2.getSalary()){
    
    
			return -1;
		}else if(e1.getSalary() < e2.getSalary()){
    
    
			return 1;
		}
		return 0;
	}
}
package com.atguigu.test06.exer;
import java.util.Arrays;
/*	
(3)在测试类中创建Employee[]数组,调用java.util.Arrays的sort方法进行排序,遍历结果。
	 用SalaryComparator对象重新对Employee[]数组进行排序,遍历结果。
*/
public class TestExer2 {
    
    
	public static void main(String[] args) {
    
    
		Employee[] all = new Employee[3];
		all[0] = new Employee(2, "王小二", 22, 20000);
		all[1] = new Employee(3, "张三", 23, 13000);
		all[2] = new Employee(1, "李四", 24, 8000);
				
		//调用java.util.Arrays的sort方法进行排序,遍历结果
		Arrays.sort(all);		
		for (int i = 0; i < all.length; i++) {
    
     //按编号id从小到大排序
			System.out.println(all[i]);
		}
		System.out.println("-----------------------------");
				
		//再次调用java.util.Arrays的sort方法进行排序,遍历结果
		Arrays.sort(all, new SalaryComparator());
		for (int i = 0; i < all.length; i++) {
    
    
			System.out.println(all[i]);
		}
	}
}

在这里插入图片描述

4. 医生帮换心脏

在这里插入图片描述
在这里插入图片描述

package com.atguigu.test06;

public abstract class Organ {
    
      //器官类型
	public abstract void doWork();
}
package com.atguigu.test06;
import java.util.Random;

public class Body {
    
    
	private String owner;
	private double weight;//克
	private boolean health;
	private Organ heart;	
	public Body(String owner, double weight, boolean health) {
    
    
		super();
		this.owner = owner;
		this.weight = weight;
		this.health = health;
		
//如下heart在有参构造中根据身体body状况创建心脏对象,new Heart()不传参,无参构造。
		Heart heart =  new Heart();
		heart.size = weight * 0.005;
		Random rand = new Random();
		if(health){
    
    
			heart.color = "鲜红色";
			//rand.nextInt(41)==>[0,41),[0,40]   //60-100
			heart.beatPerMinute = rand.nextInt(41) + 60;
		}else{
    
    
			heart.color = "暗红色";
			//[0,60) 或 [101,~)
			heart.beatPerMinute  = rand.nextInt(60);
		}		
		this.heart = heart;  //此时才创建
	}

//1111111111111111111111111111111111111111111111111111111111111111111111111111			
	private class Heart extends Organ{
    
    
		int beatPerMinute;//每分钟跳动次数
		String color;
		double size;		
		@Override
		public void doWork() {
    
    
			System.out.println("心率:" + beatPerMinute + ",大小:" + size + ",颜色:" + color);
	  //如下owner属性是创建Heart对象的那个Body对象,Body.this指Body这类的成员变量,不是外部传入
//			System.out.println("为血液流动提供动力,把血液运行至" + owner + "身体各个部分");
			System.out.println("为血液流动提供动力,把血液运行至" + Body.this.owner + "身体各个部分");
		}
	}
	public String getOwner() {
    
    
		return owner;
	}
	public void setOwner(String owner) {
    
    
		this.owner = owner;
	}
	public double getWeight() {
    
    
		return weight;
	}
	public void setWeight(double weight) {
    
    
		this.weight = weight;
	}
	public boolean isHealth() {
    
    
		return health;
	}
	public void setHealth(boolean health) {
    
    
		this.health = health;
	}
	public Organ getHeart() {
    
    
		return heart;
	}
	public void setHeart(Organ heart) {
    
    
		this.heart = heart;
	}
	@Override
	public String toString() {
    
    
		return "姓名:" + owner + ", 体重:" + weight + ",健康与否:" + health;
	}	
}
package com.atguigu.test06;

public class Doctor {
    
    
	public void swapHeart(Body b1, Body b2){
    
    
		Organ temp = b1.getHeart();
		b1.setHeart(b2.getHeart()); //b1心脏为b2
		b2.setHeart(temp);  //b2心脏为b1
		
		boolean hTemp = b1.isHealth();
		b1.setHealth(b2.isHealth());  //b1健康为b2
		b2.setHealth(hTemp);  //b2心脏为b1
	}
}
package com.atguigu.test06;

public class TestExer06 {
    
    
	public static void main(String[] args) {
    
    
		Body b1 = new Body("张三", 50000, true);
		Body b2 = new Body("李四",100000,false);				
		System.out.println(b1); //姓名 ,体重 ,健康		
		b1.getHeart().doWork();	   //心率 ,为血液			
		System.out.println(b2); //姓名 ,体重 ,健康		
		b2.getHeart().doWork();	   //心率 ,为血液	 
				
		System.out.println("============================");	
		Doctor d = new Doctor();
		d.swapHeart(b1, b2);	
			
		System.out.println(b1); //姓名 ,体重 ,健康
		b1.getHeart().doWork();	    //心率 ,为血液			
		System.out.println(b2); //姓名 ,体重 ,健康
		b2.getHeart().doWork();    //心率 ,为血液
	}
}

在这里插入图片描述
B站/知乎/微信公众号:码农编程录
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43435675/article/details/112618653