输入文件:
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;
}
}
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;
}
}