1、card类,继承了comparable接口

package cardGame_simple;

public class card implements Comparable{

private String card_num;

private String card_type;

private double card_indent;

public card(){}

/**

* 创建一般牌*/

public card(String card_num,String card_type) throws CardsException{

//生成卡牌的数值

int tempInt = Integer.parseInt(card_num);

int tempNum;

if(tempInt<1 tempInt>13)

throw new CardsException("输入了不合法的卡片数值,卡片数值应该在1~13之间");

else {

switch(tempInt){

case 11:this.card_num="J";

break;

case 12:this.card_num="Q";

break;

case 13:this.card_num="K";

break;

default:this.card_num=tempInt+"";

}

}

if(card_type.equals("红桃")){

this.card_type = card_type;

tempNum = 0;

} else if(card_type.equals("黑桃")){

this.card_type = card_type;

tempNum = 13;

} else if(card_type.equals("梅花")){

this.card_type = card_type;

tempNum = 26;

} else if(card_type.equals("方块")){

this.card_type = card_type;

tempNum = 39;

}

else throw new CardsException("不合法的花色,本构造器不允许大王小王");

this.card_indent = tempInt+tempNum;

}

public String getCard_num() {

return card_num;

}

public void setCard_num(String card_num) {

this.card_num = card_num;

}

public String getCard_type() {

return card_type;

}

public void setCard_type(String card_type) {

this.card_type = card_type;

}

public double getCard_indent() {

return card_indent;

}

public void setCard_indent(double card_indent) {

this.card_indent = card_indent;

}

@Override

public int hashCode() {

final int prime = 31;

int result = 1;

long temp;

temp = Double.doubleToLongBits(card_indent);

result = prime * result + (int) (temp ^ (temp >>> 32));

return result;

}

public boolean equals(Object obj) {

if (this == obj)

return true;

if (obj == null)

return false;

if (getClass() != obj.getClass())

return false;

card other = (card) obj;

if (Double.doubleToLongBits(card_indent) != Double.doubleToLongBits(other.card_indent))

return false;

return true;

}

public int compareTo(card card) {

if(this.card_indent>card.card_indent) return 1;

else if(this.card_indent

return 0;

}

public String toString() {

return " "+card_type + card_num+" " ;

}

}

2、实践一下自定义异常类,并且在上文的card类的构造方法上抛出

package cardGame_simple;

public class CardsException extends Exception{

public CardsException(){}

public CardsException(String message){super();}

}

创建的player类,countScore()方法是后面发现要比较大小凑得..

package cardGame_simple;

import java.util.ArrayList;

import java.util.List;

public class player {

private String name;

private List deliverdCard = new ArrayList();

public player(String name){

this.name = name;

}

public String getName() {

return name;

}

public List getDeliverdCard() {

return deliverdCard;

}

public void pushCard(card card){

deliverdCard.add(card);

}

public void pushCards(List cards){

deliverdCard.addAll(cards);

}

public double countScore(){

return deliverdCard.get(deliverdCard.size()-1).getCard_indent()+

deliverdCard.get(deliverdCard.size()-2).getCard_indent();

}

@Override

public String toString() {

return name;

}

}

3、游戏类

package cardGame_simple;

import java.util.ArrayList;

import java.util.List;

import java.util.Scanner;

public class cardGame{

public static int ALLNUM = 13*4;

private List RandomCards;

private List BasicCardSet;

private List playerList;

public cardGame(){

}

//主逻辑

public void newRound(Scanner console) throws CardsException{

genaratePlayer(console);

genarateCards();

while(true){

deliverCard(console);

compareCard();

System.out.println("是否继续:true/false");

String temp = console.next();

if(temp.equals("true")) continue;

else break;

}

}

//生成玩家

private void genaratePlayer(Scanner console){

playerList = new ArrayList();

System.out.println("现在开始加入玩家(建议加入两个以上玩家)");

while(true){

System.out.println("请输入玩家姓名:");

String temp = console.next();

player tempP = new player(temp);

playerList.add(tempP);

System.out.println("是否继续:true/false");

temp = console.next();

if(temp.equals("true")) continue;

else break;

}

//加入空缺的玩家,以robot代替

int j = 1;

while(playerList.size()<2){

player tempRob = new player("robot"+j);

playerList.add(tempRob);

j++;

}

System.out.println("加入玩家完毕!\n");

printPlayerList();

}

//发牌,如果牌池无牌了则停止

private void deliverCard(Scanner console) throws CardsException{

if(RandomCards.size()<=playerList.size()*2) isRestartRound(console);

else{

for (player temp : playerList) {

temp.pushCard(RandomCards.get(0));

temp.pushCard(RandomCards.get(1));

RandomCards.remove(0);

RandomCards.remove(1);

}

}

}

//决定胜负

private void compareCard(){

System.out.println("现在公布手牌");

player MaxOne = playerList.get(1);

for (player tempP:playerList) {

if(tempP.countScore()>MaxOne.countScore()) MaxOne = tempP;

System.out.println(tempP.toString()+":");

printCardsList(tempP.getDeliverdCard(), ALLNUM);

}

System.out.println("赢家是:"+MaxOne.toString());

}

//停止

private void isRestartRound(Scanner console) throws CardsException {

System.out.println("牌池已经干枯,是否开始新的一局游戏?");

String tempStr = console.next();

if(tempStr.equals("true")) this.newRound(console);

else System.exit(0);

}

private void genarateCards() throws CardsException{

BasicCardSet = new ArrayList();

RandomCards = new ArrayList();

for(int i=1 ; i<=13 ;i++){

BasicCardSet.add(new card(i+"","红桃"));

BasicCardSet.add(new card(i+"","黑桃"));

BasicCardSet.add(new card(i+"","梅花"));

BasicCardSet.add(new card(i+"","方块"));

}

BasicCardSet.sort(null);

System.out.println("现有牌组如下\n");

printCardsList(BasicCardSet,ALLNUM/4);

System.out.println("洗牌");

//生成随机的卡片组合RandomCards

int randomInt;

card temp;

for(int i=1 ;i<=ALLNUM; i++){

do{

randomInt = (int)Math.floor(ALLNUM*Math.random());//使用floor来避免数组越界的异常出现

temp = BasicCardSet.get(randomInt);

}while(RandomCards.contains(temp));

RandomCards.add(temp);

}

}

private void printPlayerList(){

System.out.println("现有以下玩家");

StringBuilder tempStr = new StringBuilder();

for (player temp : playerList) tempStr.append(temp.toString()+"\n");

System.out.println(tempStr.toString());

}

private void printCardsList(List cards,int lineWidth){

StringBuilder tempStr = new StringBuilder();

//通过i控制每行打印多少卡片

int i=1;

for (card card : cards){

if(i>lineWidth){

tempStr.append("\n");

i=1;

}

tempStr.append(card.toString());

i++;

}

System.out.println(tempStr.toString());

}

//主函数

public static void main(String[] args) throws CardsException {

Scanner console = new Scanner(System.in);

cardGame new1 = new cardGame();

new1.newRound(console);

}

}

java的课后作业咋写_写的简单的java第三季的课后作业相关推荐

  1. 截取年月日在hana中怎么写_写完作业就不学了怎么办?焦虑中的家长不妨先低头看看...

    相信有不少家长都遇到了孩子每天写完作业之后,明明还有很长的时间可以利用起来再学点别的,比如某些科目还需要拓展一下,比如有些知识点还需要巩固一下等等,但是孩子就是不听,怎么说也不听. 一直都想写写对这件 ...

  2. java公众号互推联盟_写公众号15个月以来,这一路上的学习与收获

    之前写了一篇自己大学经历的文章普普通通,我的三年大学,里面说到了公众号,之后就有很多人问我公众号要怎么开通,怎么运营,各种问题.说实话,要是我详细跟你说,估计得花我很多时间,而且我的公众号也不算是运营 ...

  3. java里class有什么用_安装JDK时的java和javac命令有什么用?

    相信大家都装过JDK吧,在装JDK时我们会在命令提示符窗口中通过java和javac两个命令来检测我们的环境变量是否配置正确,那么你知道java和javac两个命令有什么用吗? 在了解这两个命令的作用 ...

  4. java获取当月有几天_你真的能在JAVA开发这条路上面一直坚持下去吗?

    JAVA为什么有前途? 过去的十多年,JAVA基本每年都是全世界使用人数第一的语言.全世界数百万的IT企业构建了庞大的JAVA生态圈,大量的软件基于JAVA开发. JAVA也被誉为"计算机界 ...

  5. java比较炫的小程序_有人不建议学Java,有人不建议学Python,该怎么选择

    首先,编程语言都有自己所特定的应用场景,不同的编程语言有不同的优势,同样也会有相应的缺点,所以程序员往往需要掌握多门编程语言,以应对不同的开发场景.虽然Java和Python都属于全场景编程语言,但是 ...

  6. java奥特曼对战小怪兽_“奥特曼攻打小怪兽”java打怪升级第一步

    练习:回合制对战游戏:奥特曼和小怪兽进行PK,直到一方的血量为0时结束战斗,输出谁胜利了! 不难看出场景中有两个对象:"奥特曼"这一对象抽象为"Ao"类: &q ...

  7. Java好还是网优好_大神告诉你|Java好还是Python好?

    在进入主题之前,小智先分享几条大神的人生警句.醒世明言: 初学者才争论语言,我们只看心情. 还有: 选择入门语言最重要的是 "三观"相似 "臭味"相投 以及大家 ...

  8. Java制作一个盒子程序_编写一个简单的Java程序,模拟计算器的功能。

    提问:编写一个简单的Java程序,模拟计算器的功能. 网友回答: 程序参考: import java.awt.*; import java.awt.event.ActionEvent; import ...

  9. java洗衣店管理课程设计报告_课内资源 - 基于Java的洗衣店管理系统

    摘 要 随着科技的快速发展,人们的需求也是越来越多,为了方便对信息的管理我们小组就设计了一个洗衣店订单的管理系统. 洗衣店管理系统是典型的的信息管理系统,创建了六个类,分别是:Test类:Person ...

  10. java程序cpu突然飚高_高频面试题:Java程序占用 CPU 过高怎么排查

    这个问题可以说是 Java 面试的高频面试题了,有很多面试官都喜欢问这个问题,问题可能是下面这样的.线上一台服务器 CPU 使用率100% 了,如果你碰到这样的情况,如何排查并找到问题原因? 这就是一 ...

最新文章

  1. 内存对齐的规则以及作用
  2. unity3d游戏数据加密
  3. 学习js,尝试写一个表单验证框架(1)-规划
  4. WINCE6.0+S3C2443下的activesync问题
  5. ZOJ 2675 Little Mammoth(计算几何)
  6. QGraphicsScene 的简单理解--关于手册的简要翻译
  7. xuniji查看php.ini,虚拟机 phpstorm xdebug配置
  8. 一行命令 优化上传速度
  9. adsl拨号php,Linux_Linux系统创建ADSL拨号上网方法介绍,在使用linux创建adsl拨号连接之 - phpStudy...
  10. 免费甘特图模板直接套用,分分钟完成!
  11. Intellij idea 插件 | 超越鼓励师 吐槽
  12. Android手机红外开发—点击和长按事件
  13. Cocos2d-x 窗口大小调整
  14. HMI智能座舱自动化测试之性能测试
  15. Ubuntu下mount cifs
  16. 甘肃两地发生非洲猪瘟疫情 官方全面禁止泔水喂猪
  17. etcd+skydns构建私有域名解析服务器
  18. qualcomm的camera马达驱动代码分析
  19. 为什么觉得英文字体设计比中文字体设计来的好看?
  20. 快速傅里叶变换FFT和逆变换的python编程

热门文章

  1. 在MySql中,这四种方法可以避免重复插入数据!
  2. 过分了!耗资 5600 万、4 年开发的网络商城成“烂尾楼”,404 无法打开
  3. Java 25 岁生日快乐!
  4. 痛心!Pandownload开发者被抓!我终于决定使用Docker搭建一个多端同步网盘!
  5. 一文了解Redis持久化
  6. 微信分享JS-SDK示例页面
  7. ORA-28000: the account is locked的解决办法
  8. Adaboost原理和实例
  9. TensorFlow生成.mat文件
  10. 大数据定制化服务需在成本和差异化间平衡