java疯狂讲义 第6章练习
2020-04-05 07:19
1031 查看
第一题,创建一个关于车的抽象类,并派生其他具体车类
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(); } }
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 疯狂JAVA讲义第三章练习
- 【疯狂JAVA讲义练习】 数字转人民币大写【加强版】
- Android疯狂讲义学习笔记——XML布局和java代码共同控制用户界面组件
- 疯狂JAVA讲义---第十一章(下):AWT编程-高级应用
- 疯狂JAVA讲义-接口和抽象类比较
- 疯狂JAVA讲义---第十二章:Swing编程(七)JTree树
- 疯狂java讲义----java顺序循环与java数组
- java8--IO工具类(java疯狂讲义3复习笔记)
- 疯狂java讲义 第四章 01人民币的转换读法小程序
- 疯狂java 讲义第三章练习题---画圆
- Java疯狂讲义
- 疯狂java讲义 第三章 数据类型和运算符
- 【读书笔记】疯狂java讲义学习(二)—— 数据类型和运算符
- 疯狂java讲义第三版第五章第一题
- 疯狂JAVA讲义学习笔记1——Java语言概述
- java疯狂讲义第四章练习题
- 李刚java疯狂讲义(笔记)
- 疯狂JAVA讲义---第七章(中):集合List,Queue
- 第三章 数据类型和运算符 疯狂 Java 讲义
- [疯狂Java讲义精粹] 第五章|面向对象(下)