整理和股评牌型

6 篇文章 0 订阅
6 篇文章 0 订阅
输入文件:
2C QD TC AD 6C 3D TD 3H 5H 7H AS JH KH
要求输出:
CLUBS   10 T 6 2
DIAMONDS   10 T A Q 3
HEARTS   K J 7 5 3
SPADES   A
Point=16

问题描述:
输入是一个表示扑克牌的字符对流。例如输入文件,表示梅花2,方块皇后,梅花10等。对(pair)由面值(rank)和花色(suit)组成。其中面值为A,2,3,4,5,6,7,8,9,T,J,Q,K。花色为C(clubs,梅花)、D(diamond,方块),H(heart,红桃),S(spade,黑桃)。可以假设各个输入行表示13张扑克牌,而且不含错误,输入以文件结束符终止。
各个输入行形成13张牌的牌型。以易读形式显示各个牌型,按花色和花色中的面值排列(A为高)。然后按下面的标准评估:
A记为4
K记为3
Q记为3
J记为1
空(某一花色无牌)记为3
单牌(某一花色一张牌)记为2
双牌(某一花色两张牌)记为1
对于某种花色中超过5,在5张牌之外,每张记为1
程序代码:
package com.test;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.Vector;

public class BridgeHand {

    /**
    整理和股评牌型
     */
    private Pair[] pair;
    public static void main(String[] args) {
Pair []pair=new Pair[13];
FileReader rd=null;
try {
   rd=new FileReader(".\\Bidge.txt");
} catch (FileNotFoundException e) {
   System.out.print("读入文件未找到!");
    e.printStackTrace();
}
BufferedReader buf_rd=new BufferedReader(rd);
String str=null;
    try {
str=buf_rd.readLine();
    } catch (IOException e) {
e.printStackTrace();
    }
String []str_arr=str.split(" ");
if(str_arr.length!=13){
    System.out.print("数据长度错误,程序退出!");
    System.exit(0);
}
for(int i=0;i<str_arr.length;i++){
    char[] ch=str_arr[i].toCharArray();
    char a,b;
    a=ch[0];
    b=ch[1];
    pair[i]=new Pair(a,b);
}
try {
    buf_rd.close();
    rd.close();
} catch (IOException e) {
   
    e.printStackTrace();
}
BridgeHand bh = new BridgeHand(pair);
Vector<Pair> p = null;
int count[];
int point=0;
char[] suit = { 'C', 'D', 'H', 'S' };
count=new int[suit.length];
String str_Sav[]={"","","",""};
for (int i = 0; i < suit.length; i++) {
    p = bh.getSuit(suit[i]);
    count[i]=p.size();
    Iterator it = p.iterator();
    switch(suit[i]){
    case 'C':System.out.print("CLUBS");str_Sav[i]+="CLUBS   ";break;
    case 'D':System.out.print("DIAMONDS");str_Sav[i]+="DIAMONDS   ";break;
    case 'H':System.out.print("HEARTS");str_Sav[i]+="HEARTS   ";break;
    case 'S':System.out.print("SPADES");str_Sav[i]+="SPADES   ";break;
    }
    while (it.hasNext()) {
Pair pa = (Pair) it.next();
if(pa.getRank()=='T'){
    System.out.print(" "+"10");
    str_Sav[i]+="10 ";
}
else
System.out.print(" "+pa.getRank());
str_Sav[i]+=pa.getRank()+" ";
if(pa.getRank()=='A')point+=4;
if(pa.getRank()=='K')point+=3;
if(pa.getRank()=='Q')point+=2;
if(pa.getRank()=='J')point+=1;
}
    System.out.println();
    if(count[i]==0)point+=3;
    if(count[i]==1)point+=2;
    if(count[i]==2)point+=1;
    if(count[i]>5)point+=count[i]-5;
}
System.out.println("Points="+point);
FileWriter fw=null;
try {
    fw=new FileWriter(".\\Bidge_out.txt");
} catch (IOException e) {
    e.printStackTrace();
}
PrintWriter pw=new PrintWriter(fw,true);
for(int i=0;i<str_Sav.length;i++){
    pw.println(str_Sav[i]);
}
pw.println("Point="+point);
pw.close();
try {
    fw.close();
} catch (IOException e) {
    e.printStackTrace();
}
    }
    public  BridgeHand(Pair[] p) {
//构造函数
pair=p;
    }
    public Vector<Pair> getSuit(char suit){
//获得指定花色的扑克牌
Vector<Pair> clubs=new Vector();
for(int i=0;i<pair.length;i++){
    if(pair[i].getSuit()==suit)clubs.add(pair[i]);
}
MyComp comp=new MyComp();
Collections.sort(clubs, comp);
return clubs;
    }
}
class MyComp implements Comparator<Pair>{
  //比较类
    public int compare(Pair o1, Pair o2) {
if(o1.getRank()=='A')return 1;
if(o2.getRank()=='A')return 1;
if(o1.getRank()>o2.getRank())return -1;
if(o1.getRank()<o2.getRank())return 1;
return 0;
    }
   
}
class Pair{
    //扑克牌类
    private char rank;
    private char suit;
    public Pair(char rank,char suit){
this.rank=rank;this.suit=suit;
    }
    public char getRank(){
return rank;

    }
    public char getSuit(){
return suit;

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值