第一题,创建一个关于车的抽象类,并派生其他具体车类
public abstract class Car{
//车的名称和作业属性
private String carName;
private String carFunction;
//无参数构造器和含参构造器
public Car(){}
public Car(String carName,String carFunction){
this.carName=carName;
this.carFunction=carFunction;
}
//类里面的抽象方法
public abstract void drink();
//属性的getter
public String getCarName(){
return this.carName;
}
public String getCarFunction(){
return this.carFunction;
}
}
public class Tractor extends Car
{
//抽象方法的实现
public void drink(){
System.out.println("拖拉机需要人驾驶");
}
//构造器
public Tractor(String carName,String carFunction){
super(carName,carFunction);
}
public static void main(String[] args){
var br=new Tractor("拖拉机","减少人力负担");
System.out.println("这是"+br.getCarName()+"它可以"+br.getCarFunction());
}
}
第二题,定义一个接口,用匿名内部类实现它
interface TestInterface{
int add(int a,int b);
int multiply(int a,int b);
}
public class Test{
//定义一个需要接口函数的方法
public void test(TestInterface p){
System.out.println(p.add(4,4)==p.multiply(2,4));
}
public static void main(String[] args){
var br = new Test();
br.test(new TestInterface(){
public int add(int a,int b){
return a+b;
}
public int multiply(int a,int b){
return a*b;
}
});
}
}
第三题,定义一个函数接口,用lambda表达式定义方法体
interface TestInterface{
void print();
default void println(){
print();
System.out.println("print方法已调用");
}
}
public class Test{
public static void main(String[] args){
TestInterface br = ()-> {
System.out.println("print方法");
};
br.println();
}
}
第4题,做一部分梭哈游戏,记录玩家状态,实现发牌功能
public class Player{
//对应存放牌的数组
private int[][] chess=new int[4][13];
private String status;
//自定义构造器
public Player(){
this.status = "正在游戏中";
}
//放弃游戏的方法
public void giveUp(){
System.out.println("你已放弃游戏");
this.status = "放弃游戏";
}
//chess某个元素的setter方法
public void setChess(int hand,int line){
chess[hand][line] = 1;
}
//status的getter方法
public String getStatus(){
return this.status;
}
}
import java.util.Random;
import java.util.Scanner;
public class PlayGame{
//定义一个数组存取已发出的牌
private static int[][] record = new int[4][13];
public static void main(String[] args){
//创建5个player对象
Player[] player = new Player[5] ;
for(int i=0;i<5;i++){
player[i] = new Player();
}
var br = new PlayGame();
//此处本该循环多次发牌游戏,但题目不要求判断是否获胜,所以这里只做初始发牌再加两次发 牌,有兴趣的可以自己写个判断游戏是否接受的方法
for(int j=0;j<3;j++){
//初始发牌
if(j==0){
for(int i=0;i<5;i++){
br.setRandom(player[i],2);
}}
else {
for(int i=0;i<5;i++)
if(player[i].getStatus().equals("正在游戏中"))
{
System.out.print("玩家"+i+"分到牌:");
br.setRandom(player[i],1);
br.ifGiveUp(player[i]);
}}
}
}
//随机取牌
public void setRandom(Player p,int times){
int hand=0,line=0;
Random rand =new Random();
for(int i=0;i<times;i++){
hand = rand.nextInt(3);
line = rand.nextInt(13);
if(record[hand][line]==1){
i--;
}
else{
p.setChess(hand,line);
record[hand][line] = 1;
if(times == 1)printChess(hand,line);//非初始牌
}
}
}
public void printChess(int hand,int line){
//应该将hand分别转为花色,line>10的部分另外处理,我这里就偷点懒,啥都不弄
System.out.println("["+hand+"]["+line+"]");
}
public void ifGiveUp(Player p){
var sc = new Scanner(System.in);
System.out.println("是否放弃游戏Y/N?");
if(sc.next().charAt(0) == 'Y')p.giveUp();
}
}