`

java算法----纸牌的新建、洗牌与计数

    博客分类:
  • java
 
阅读更多
题目要求:

 * 新建一副牌,52张,4种花色,每一种都有13张
 * 随机洗牌
 * 每次顺序抽取两张,如果两张牌的牌面值想通过,记录一次
 * 直到抽完为止
 * 最后输出一共记录了多少次

Card.java代码如下:
package com.shuobaotang.interview;

public class Card {
	
	private  int number;//牌面值
	
	private String color;//牌面花色
	
	public Card(int number,String color){
		this.number = number;
		this.color = color;
	}

	public int getNumber() {
		return number;
	}

	public void setNumber(int number) {
		this.number = number;
	}

	public String getColor() {
		return color;
	}

	public void setColor(String color) {
		this.color = color;
	}
	
	@Override
	public String toString(){
		return number+":"+color;
	}
}



CountCards.java代码如下:

package com.shuobaotang.interview;

/**
 * 新建一副牌,52张,4种花色,每一种都有13张
 * 随机洗牌
 * 每次顺序抽取两张,如果两张牌的牌面值想通过,记录一次
 * 直到抽完为止
 * 最后输出一共记录了多少次
 * @author yangjianzhou
 *
 */
public class CountCards {
	
	public static void main(String[] args) {
		CountCards cc = new CountCards();
		Card[] cards = cc.createCards();
		Card[] cs = cc.refreshCards(cards);
		System.out.println(cc.getCount(cs));
	}

	public Card[] createCards(){
		Card [] cards = new Card[52];
		int i;
		for(i =1;i<=13;i++){
			Card card1 = new Card(i,"黑");
			Card card2 = new Card(i,"红");
			Card card3 = new Card(i,"梅");
			Card card4 = new Card(i,"方");
			cards[(i-1)*4]=card1;
			cards[(i-1)*4+1]=card2;
			cards[(i-1)*4+2]=card3;
			cards[(i-1)*4+3]=card4;
		}
		return cards;
	}

	public Card[] refreshCards(Card[] cards){
        int [] aa = new int[52];
        Card[] cs = new Card[52];
        int i;
        for(i=0;i<52;i++){
        	while(true){
            	int index = (int)(Math.random()*52);
            	if(aa[index]==0){
            		cs[i]=cards[index];
            		aa[index]=1;
            		break;
            	}	
        	}
        }
		return cs;
	}
	
	public int getCount(Card[] cards){
		int count =0;
		int i;
		for(i=0;i<52;i=i+2){
			Card card1 = cards[i];
			Card card2 = cards[i+1];
			if(card1.getNumber()==card2.getNumber()){
				count++;
				System.out.println(card1);
				System.out.println(card2);
				System.out.println("======================");
			}
		}
		return count;
	}
}



第一次运行结果:
6:黑
6:方
======================
12:方
12:梅
======================
2



第二次运行结果:

10:方
10:黑
======================
1

分享到:
评论

相关推荐

    [Java算法-排序练习]计数排序.java

    该资源提供了在Java中如何实现计数排序的全面指南。文档涵盖了计数排序的基本概念,包括如何对数组进行排序以及如何在Java中实现计数排序。此外,文档还包括一个逐步指南,介绍了如何在Java中实现计数排序,包括详细...

    详解Java常用排序算法-计数排序

    Java 排序算法 - 计数排序 计数排序(Counting Sort)是一种非比较排序算法,它的基本思想是统计数组中每个元素出现的次数,然后根据元素出现的次数依次将元素放入有序的数组中。计数排序时间复杂度为 O(n+k),其中...

    Java实现蜘蛛纸牌小游戏源码.zip

    游戏逻辑(如洗牌、发牌等)可能在一个独立的线程中执行,以避免阻塞UI。 5. **算法与数据结构**:蜘蛛纸牌游戏的规则涉及到排序、比较和移除等操作,这需要有效的算法和数据结构支持。例如,使用栈(Stack)来模拟...

    java swing实现蜘蛛纸牌

    在这个“java swing实现蜘蛛纸牌”的项目中,开发者使用Swing来创建了一个经典的蜘蛛纸牌游戏。接下来,我们将深入探讨Java Swing在游戏开发中的应用,以及蜘蛛纸牌游戏的基本规则和实现原理。 首先,Java Swing...

    基于java实现的空当接龙纸牌小游戏

    空当接龙是一款广受欢迎的单人纸牌游戏,通过组织和移动纸牌,最终目标是将所有牌按照花色从A到K排序。 首先,我们要理解Java的基础知识。Java是一种面向对象的编程语言,由Sun Microsystems(现已被Oracle收购)于...

    java蜘蛛纸牌源代码

    在这个Java蜘蛛纸牌项目中,源代码可能是由一系列类、方法和逻辑控制结构组成的,用于实现游戏的各种功能,如洗牌、发牌、移动牌堆等。Java是一种面向对象的编程语言,它以其跨平台性和强大的库支持而受到广大开发者...

    Java代码-排序-直接插入排序、希尔排序、直接选择排序、冒泡排序、堆排序、快速排序、归并排序中部分排序以及算法-贪心法

    Java代码-排序-直接插入排序、希尔排序、直接选择排序、冒泡排序、堆排序、快速排序、归并排序中部分排序以及算法-贪心法,大家可以将源码下载下来进行学习,附带着注释和解释,有不理解的可以找博主一起探讨,共同...

    java实现的蜘蛛纸牌源代码

    【Java实现的蜘蛛纸牌源代码】是一种基于Java编程语言开发的桌面游戏,它复现了经典的蜘蛛纸牌玩法。这种游戏通常包括排列和消除纸牌以完成关卡的目标。在给定的压缩包中,有两个主要部分:打包发布的可执行文件和...

    蜘蛛纸牌java

    3. **牌堆类**:管理纸牌的堆栈,实现洗牌、发牌、移动牌等操作。 4. **游戏逻辑类**:包含蜘蛛纸牌的规则和算法,用于判断游戏状态和执行合法操作。 5. **用户界面类**:使用Java的Swing或JavaFX库构建图形用户界面...

    蜘蛛纸牌java代码

    Java代码实现的蜘蛛纸牌项目不仅是一个有趣的编程练习,也能够帮助开发者提升面向对象编程、图形界面设计和算法设计的能力。通过分析和理解这个项目,我们可以学习到如何将复杂的游戏逻辑转化为清晰的代码结构,以及...

    纸牌的洗牌与发牌过程C版

    ### 纸牌游戏中的洗牌与发牌过程——基于C语言实现 #### 概述 本篇文章将详细介绍一个基于C语言实现的纸牌洗牌与发牌过程的程序。该程序通过一系列算法实现了随机洗牌及按照规定规则进行发牌的功能,并能够直观地...

    G-S算法 java实现

    里面的Gs.java是算法文件。另外一个带图形界面的swing类文件可以忽略不看。 算法的输入是两个矩阵data_man 和data_woman。 data\1 里面的数据对应了男士优先的gs算法,2对应了女士优先的算法。 其中矩阵的输入代表了...

    算法 - Java-所有算法均用 Java 实现

    算法 - Java Build Discord chat Gitpod ready-to-code Open in Gitpod 您可以运行和编辑算法,或者只需单击一下即可使用 Gitpod.io(免费的在线开发环境)为算法做出贡献。 算法: 我们的目录包含完整的应用程序...

    数据结构与算法-java

    以下是基于标题“数据结构与算法-java”及描述中提到的“数据结构与算法分析_Java语言描述高清版(第2版)1.pdf”所涵盖的一些关键知识点: 1. **数据结构**: - **数组**:最基础的数据结构,存储固定大小的同类型...

    蜘蛛纸牌JAVA程序

    总的来说,"蜘蛛纸牌JAVA程序"是一个综合性的项目,涵盖了JAVA编程的基础到进阶知识,对初学者来说,既能锻炼基本的编程技能,也能提升对面向对象编程、GUI开发、数据结构和算法的理解。通过实际操作,学习者可以在...

    银行家算法-java语言

    银行家算法-java语言

    洗牌算法整理

    【洗牌算法】是计算机科学中用于生成等概率随机序列的一种方法,常见于各种需要随机化元素顺序的场景,如游戏、模拟等。洗牌算法的主要目标是确保原数组中的每个元素在打乱后都有相等的概率出现在序列的任何位置。 ...

    javacv-platform-1.3-bin.zip

    总的来说,JavaCV 1.3提供了一个跨平台的解决方案,将计算机视觉、音频视频处理的强大功能与Java的易用性相结合,大大降低了开发复杂视觉应用的门槛。通过这个`javacv-platform-1.3-bin.zip`压缩包,你可以快速地在...

    C语言开发-经典游戏-像素蜘蛛纸牌

    - 蜘蛛纸牌是一种单人纸牌游戏,通常使用两副或四副牌,目标是通过整理牌堆将所有牌按照顺序排列。 - 游戏布局:学习如何用C语言表示游戏桌面上的牌堆、储备区、基础列等元素。 - 牌的移动规则:编程实现合法的牌...

Global site tag (gtag.js) - Google Analytics