用java如何判断扑克牌同花顺

Python012

用java如何判断扑克牌同花顺,第1张

扑克牌有两个属性,花色和牌面大小,可以分别比较花色和牌面大小是否递增或递减来确定是不是同花顺.但是由于扑克牌会有JQKA,所以牌面大小最好以数组或者字符串的方式实现,通过比较下标来比较大小,以下是大概的代码

public class PuKe {

private String color

private String num

public String getColor() {

return color

}

public void setColor(String color) {

this.color = color

}

public String getNum() {

return num

}

public void setNum(String num) {

this.num = num

}

public PuKe(String color, String num) {

super()

this.color = color

this.num = num

}

public static void main(String[] args) {

List<PuKe>card = new ArrayList<PuKe>()

card.add(new PuKe("black", "2"))

card.add(new PuKe("black", "3"))

card.add(new PuKe("black", "4"))

card.add(new PuKe("black", "5"))

card.add(new PuKe("black", "6"))

//这里因为10是两位数且牌面里面用不到1,所以直接用1代替10

String check = "234567891JQKA"

boolean flage =true

//自定义比较器,用num在check里的下标大小作为比较依据排序

Collections.sort(card, new Comparator<Object>() {

@Override

public int compare(Object o1, Object o2) {

PuKe er1 = (PuKe) o1

PuKe er2 = (PuKe) o2

Integer org1 = (int)(er1.getNum() == null ? 0.0 : check.indexOf(er1.getNum()))

Integer org2 = (int)(er1.getNum() == null ? 0.0 : check.indexOf(er2.getNum()))

return org1.compareTo(org2)

}

})

for (int i = 0 i < card.size()-1 i++) {

//遍历所有的牌,如果颜色不一样直接跳出循环,不是同花顺

if(!card.get(i).getColor().equals(card.get(i+1).getColor())){

flage =false

break

}

//如果上一张减去下一张的差值不是1,说明牌面不是顺子,也不是同花顺,跳出循环

if((int)check.indexOf(card.get(i+1).getNum())-(int)check.indexOf(card.get(i).getNum())!=1){

flage = false

break

}

}

if(flage){

System.out.println("牌面是同花顺")

}else{

System.out.println("牌面不是同花顺")

}

}

}

不过这种方法唯一不好的地方是check中不能直接用10,将来展示的时候需要判定,展示的是1时直接改成10.

其实实现方法很多,我这么写是因为最近在复习,这么写用到的知识点相对会多一点.

import java.io.BufferedReader

import java.io.FileReader

/**

* 读取并解析文本文件

*/

public class ReadMusicInfo {

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

//注意这里music.db文件的位置

BufferedReader in = new BufferedReader(new FileReader("D:/music.db"))

//保存读取的一行信息

String lineStr = null

//保存行信息按逗号分隔后的数据

String music[] = null

//先读取文件的一行内容

lineStr = in.readLine()

//如果读取的内容不为空

while(null != lineStr){

//按逗号分隔每一行的内容

music = lineStr.split(",")

//长度为5的为歌手的那行信息

if(5 == music.length){

System.out.println(

String.format(

"歌手:%s 地区:%s 相片:%s 专辑:%s 专辑包含歌曲数:%s",

music[0],music[2],music[3],music[1],music[4]

)

)

System.out.println("歌曲列表如下:")

}

//长度为2的为歌曲信息

else if(2 == music.length){

System.out.println("\t" + music[0] + "\t" + music[1])

}

// 其它信息原样输出

else{

System.out.println(lineStr)

}

lineStr = in.readLine()

}

in.close()

}

}

至于歌曲名后面的数字,我没有猜出来它的含义,是歌曲播放里长秒数吗?和题目无关了,反正都解析出来了,你可以按你的需要修改那些输出信息.

QQ:58472399

1.

单循环判断数组中是否有存在重复值

这个取决于数组使用的数字,如果是字符串则没办法处理。

面试题:已知有一长度为100的无序随机整型数组,且数值范围是[1,100],写一算法,判断数组中是否有存在重复值,要求,不得嵌套循环,不得使用递归。

方法一:1publicboolCheckRepeat(int[]a)2{3//定义一个数组测试用,思想:数组的下标和值都是上一个数组元素中的值4int[]array=newint[101]5//将数组的值都复制到测试数组中6for(inti=0i<100i++)7{8inta=a[i]9array[a]=a//或者Array[a]=任何非零的数字,做标志用。10}1112//如果数组没有重复,则会填满测试数组,否则数组中将出现自动初始化的值13for(inti=1i<101i++)14{15//判断如果数组中有自动初始的值,则数组没有被填满16if(array[i]==0)17{18returnfalse19}20}21returntrue22}上述方法收集自网络,这个方法写的很巧妙,思路也很清晰,但看起来还是有些多余代码,尽管满足了题目要求,只使用了一重循环,但算法中使用了两个循环进行判断,感觉还不够简洁,下面改造算法为一个单循环:方法二:1publicboolCheckRepeat(int[]a)2{3int[]array=newint[101]//数组元素值初始化默认为04for(inti=0i<100i++)5{6inta=a[i]7if(array[a]!=0)//说明此元素已经赋过值了,即发生了重复8returntrue9else10array[a]=1//做标志用,也可赋任何不为0的数11}12returnfalse13}

2.字符串数组的情况Java代码/***判断数组内有无重复元素

*@paramargs

*@returntrue有重复|false无重复*/publicstaticbooleanhasRepeat(Object[]args){

Set<ObjecttempSet=newHashSet<Object()

for(inti=0i<args.lengthi++){

tempSet.add(args[i])}if(args.length==tempSet.size()){

returnfalse}else{returntrue}}/** * 判断数组内有无重复元素 * @param args * @return true 有重复 | false 无重复 */ public static boolean hasRepeat(Object[] args){ Set<Object tempSet = new HashSet<Object() for (int i = 0i <args.lengthi++) {tempSet.add(args[i]) } if(args.length == tempSet.size()){return false }else{return true } }

还可以通过其他方法:

1.两个for循环,依次判断是否相等,或先调用Arrays.sort(),然后再用Arrays.binarysearch()比较

2.把数组转化成一个用特殊字符分隔的字符串,然后用正则表达式里的\1,也就是第一个匹配结果,此方法效率较高。