54张扑克,存放在一个List .实现List中扑克排序,要求采用的顺序为:大王,小王,黑桃A-K, 红心A-K, 草花A-K,方块A-K.
2014-08-21 10:34
302 查看
方式一:
package com.james.test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
public class Poker
{
int color;// 花色 1.大王,小王,2.黑桃,3.红心,4.草花,5.方块
int id;// 扑克字面值 大王1,小王2,其他花色1-13 分别代表A-K
public Poker(int color, int id)
{
this.color = color;
this.id = id;
}
public int getColor()
{
return color;
}
public int getId()
{
return id;
}
public static void Display(List<Poker> l)
{
Iterator<Poker> it = l.iterator();
while (it.hasNext())
{
Poker pk = it.next();
System.out.println("Color:" + pk.getColor() + " ,Id:" + pk.getId());
}
}
public static void main(String[] args)
{
Poker p0 = new Poker(1, 1);// 大王
Poker p1 = new Poker(1, 2);// 小王
int n = 4;// 普通花色种类
int m = 13;// 普通花色扑克字面值上限
Poker[] p = new Poker[52];// 普通花色扑克
// 构建扑克数组
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
p[i * m + j] = new Poker(i + 2, j + 1);
List<Poker> l = new ArrayList<Poker>();
// 扑克倒序插入List中(这里为了简单只是倒序,也可以写方法随机打乱顺序)
for (int i = p.length - 1; i >= 0; i--)
l.add(p[i]);
l.add(p0);
l.add(p1);
// 实例化一个比较器,用于给List排序
Comparator<Poker> cmp = new Comparator<Poker>()
{
@Override
public int compare(Poker o1, Poker o2)
{
/*
* 排序使用的规则 先按花色排序,如果花色相同再按字面值排序
*/
int color1 = o1.getColor();
int color2 = o2.getColor();
if (color1 < color2)
return -1;
if (color1 > color2)
return 1;
// 花色相同
int id1 = o1.getId();
int id2 = o2.getId();
if (id1 < id2)
return -1;
if (id1 > id2)
return 1;
// 花色和字面值都相同
return 0;
}
};
System.out.println("排序前List的内容:");
Display(l);
// 给list排序
Collections.sort(l, cmp);
System.out.println("排序后List的内容:");
Display(l);
}
}
方式二:
package test;
import java.util.ArrayList;
import java.util.List;
public class Pk {
public static void main(String[] args) {
String[] suit={"黑桃","红桃","樱花","方块"};
String[] rank={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
List cards =new ArrayList();
cards.add("大王");
cards.add("小王");
for (int i = 0; i < suit.length; i++)
for (int j = 0; j < rank.length; j++)
cards.add(suit[i]+rank[j]);
for (int i = 0; i <cards.size(); i++) {
if(i==1 || (i-1)%13==0)
System.out.println(cards.get(i));
else
System.out.print(cards.get(i)+" ");
}
}
}
package com.james.test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
public class Poker
{
int color;// 花色 1.大王,小王,2.黑桃,3.红心,4.草花,5.方块
int id;// 扑克字面值 大王1,小王2,其他花色1-13 分别代表A-K
public Poker(int color, int id)
{
this.color = color;
this.id = id;
}
public int getColor()
{
return color;
}
public int getId()
{
return id;
}
public static void Display(List<Poker> l)
{
Iterator<Poker> it = l.iterator();
while (it.hasNext())
{
Poker pk = it.next();
System.out.println("Color:" + pk.getColor() + " ,Id:" + pk.getId());
}
}
public static void main(String[] args)
{
Poker p0 = new Poker(1, 1);// 大王
Poker p1 = new Poker(1, 2);// 小王
int n = 4;// 普通花色种类
int m = 13;// 普通花色扑克字面值上限
Poker[] p = new Poker[52];// 普通花色扑克
// 构建扑克数组
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
p[i * m + j] = new Poker(i + 2, j + 1);
List<Poker> l = new ArrayList<Poker>();
// 扑克倒序插入List中(这里为了简单只是倒序,也可以写方法随机打乱顺序)
for (int i = p.length - 1; i >= 0; i--)
l.add(p[i]);
l.add(p0);
l.add(p1);
// 实例化一个比较器,用于给List排序
Comparator<Poker> cmp = new Comparator<Poker>()
{
@Override
public int compare(Poker o1, Poker o2)
{
/*
* 排序使用的规则 先按花色排序,如果花色相同再按字面值排序
*/
int color1 = o1.getColor();
int color2 = o2.getColor();
if (color1 < color2)
return -1;
if (color1 > color2)
return 1;
// 花色相同
int id1 = o1.getId();
int id2 = o2.getId();
if (id1 < id2)
return -1;
if (id1 > id2)
return 1;
// 花色和字面值都相同
return 0;
}
};
System.out.println("排序前List的内容:");
Display(l);
// 给list排序
Collections.sort(l, cmp);
System.out.println("排序后List的内容:");
Display(l);
}
}
方式二:
package test;
import java.util.ArrayList;
import java.util.List;
public class Pk {
public static void main(String[] args) {
String[] suit={"黑桃","红桃","樱花","方块"};
String[] rank={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
List cards =new ArrayList();
cards.add("大王");
cards.add("小王");
for (int i = 0; i < suit.length; i++)
for (int j = 0; j < rank.length; j++)
cards.add(suit[i]+rank[j]);
for (int i = 0; i <cards.size(); i++) {
if(i==1 || (i-1)%13==0)
System.out.println(cards.get(i));
else
System.out.print(cards.get(i)+" ");
}
}
}
相关文章推荐
- 要求顺序循环队不损失一个空间,全部能够得到有效利用,试采用设置标志位tag的方法解决“假溢出”问题,实现顺序循环队列算法
- 有十个数按从大到小的顺序存放在一个数组中,输入一个数,要求找出该数是数组中的第几个元素。如果该数不在数组中,则打印出“无此数”
- 将一个5*5的矩阵中最大的元素放在中心,四个角分别放四个最小的元素(顺序从左到右,从上到下顺序依次从小到大存放),写一个函数实现之。用main函数调用。
- 有一个数组a[N]顺序存放0~N-1,要求每隔两个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置。以8个数(N=7)为例:{0,1,2,3,4,5,6,7},0->1->2(删除)->3->4->5(删除)->6->7->0(删除),如此循环直到最后一个数被删除。
- 有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”
- java实现百度之C市现在要转移一批罪犯到D市,C市有n名罪犯,按照入狱时间有顺序,另外每个罪犯有一个罪行值,值越大罪越重。现在为了方便管理,市长决定转移入狱时间连续的c名犯人,同时要求转移犯人的罪行
- 一个概率题:54张扑克牌,除去两张大小王剩下52张扑克牌。问红桃A和黑桃A同时被一个人拿到的概率是多少?
- 有两个磁盘文件“A"和”B",各存放一行字母,先要求把这两个文件中的信息合并(按字母顺序排列),输出到一个新文件“C"中去。
- C语言 实现约瑟夫环 (有一个数组a[1000]存放0--1000;要求每隔二个数删掉一个数)
- C语言,将一个数组中的值按逆序重新存放,例如,原来的顺序是8,6,5,4,1。要求改为1,4,5,6,8
- 习题 6.9 有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”。
- 请实现一个队列,既可以存放整数,又可以存放字符串。简单的说,队列是一种数据结构,按照先进先出的顺序管理进、出队列的元素
- . 有一个一维数组,里面存储整形数据,请写一个函数,将他们按从大到小的顺序排列,要求执行效率高,并说明如何改善执行效率(该函数必须自己实现,不能使用php函数)。
- java 将一个数组中的值按逆序重新存放,例如,原来顺序为:9,5,7,4,8,要求改为:8,4,7, 5,9。
- LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子.....LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面
- php和mysql采用utf-8编码时实现按照一个文本字段的首字母的拼音顺序进行排序的方法
- 请实现一个队列,既可以存放整数,又可以存放字符串。简单的说,队列是一种数据结构,按照先进先出的顺序管理进、出队列的元素
- 实现List按与一个字符串的相似度和字母顺序排序(适用于模糊查询后的排序)
- 习题 6.5 将一个数组中的值按逆序重新存放。例如,原来顺序为8,6,5,4,1。要求改为1,4,5,6,8。
- 汇编语言: 试编制一个程序:从键盘输入一行字符,要求第一个键入的字符必须是空格符,如不 是,则退出程序;如是,则开始接收键入的字符并顺序存放在首地址为buffer的缓冲区中(空 格符不存入),直到接收