`

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

分享到:
评论

相关推荐

    行业分类-设备装置-游戏系统、纸牌、纸牌发牌盒及纸牌洗牌装置.zip

    综上所述,"行业分类-设备装置-游戏系统、纸牌、纸牌发牌盒及纸牌洗牌装置"这一主题涵盖了IT行业的多个层面,包括软件开发、硬件设计、算法应用、随机性生成以及人工智能技术。无论是数字游戏还是实体游戏,这些技术...

    java程序-蜘蛛纸牌

    【Java程序-蜘蛛纸牌】是一款经典的电脑游戏,由Microsoft公司开发并随Windows操作系统一同发布。在编程领域,实现这样的游戏可以深入理解Java语言特性和面向对象编程思想。本项目中,我们将探讨如何使用Java来设计...

    基本算法---计数.sb3

    基本算法---计数.sb3

    谷歌java格式-重新格式化 Java 源代码以符合 Google Java 风格

    google-java-format是一个重新格式化 Java 源代码以符合 Google Java Style的程序。 使用格式化程序 从命令行 下载格式化程序 并运行它: java -jar /path/to/google-java-format-${GJF_VERSION?}-all-deps.jar ...

    Java排列组合算法 - 郭睿的专栏 - CSDN博客

    Java排列组合算法 - 郭睿的专栏 - CSDN博客Java排列组合算法 - 郭睿的专栏 - CSDN博客

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

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

    神经网络算法与实现-基于Java语言.zip

    神经网络算法与实现-基于Java语言神经网络算法与实现-基于Java语言神经网络算法与实现-基于Java语言神经网络算法与实现-基于Java语言神经网络算法与实现-基于Java语言神经网络算法与实现-基于Java语言神经网络算法与...

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

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

    java蜘蛛纸牌的实现

    - **游戏逻辑**: 需要实现蜘蛛纸牌游戏的所有规则,包括发牌、移牌、翻牌、洗牌等。 - **图形界面**: 设计用户友好的界面,显示牌堆、分数、游戏状态等信息。 - **数据库交互**: 可能需要记录用户的游戏进度、最高分...

    java-zhizhu.rar_蜘蛛纸牌

    【标题】"java-zhizhu.rar_蜘蛛纸牌" 提供的是一个使用Java编程语言实现的经典游戏——蜘蛛纸牌的源代码。蜘蛛纸牌是一款广受欢迎的单人纸牌游戏,其规则复杂且富有挑战性,对于学习编程和算法设计来说是一个很好的...

    Java蜘蛛纸牌

    总之,Java蜘蛛纸牌游戏的开发涉及了Java基础、GUI设计、数据结构、算法、文件操作、错误处理等多个方面,是对开发者全面技能的考验。通过这样一个项目,开发者不仅能掌握Java编程的实战技巧,还能锻炼问题解决和...

    K-Means算法--Java实现

    在Java中实现K-Means算法,我们需要理解以下几个核心步骤和相关概念: 1. **初始化**:首先,我们需要选择K个初始质心(centroid),通常是随机选取数据集中的K个点作为初始中心。这些质心将成为簇的代表。 2. **...

    java-string-similarity, 各种字符串相似性和距离算法.zip

    java-string-similarity, 各种字符串相似性和距离算法 java-string-similarity 实现不同字符串相似度和距离度量的库。 目前已经实现了许多算法( 包括Levenshtein编辑距离和 sibblings,jaro winkler,最长公共子序列...

    蜘蛛纸牌java

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

    JAVA---算法与数据结构

    在编程领域,尤其是Java开发中,数据结构与算法是核心基础,它们对于编写高效、优化的代码至关重要。数据结构是组织、存储和处理数据的方式,而算法是解决问题或执行特定任务的步骤序列。理解并掌握这两者对于成为一...

    蜘蛛纸牌(java源码)

    首先是洗牌和发牌,这可以通过随机数生成器完成,确保每局游戏的初始布局都不同。其次是拖放逻辑,这是游戏的核心部分,涉及到相邻列之间牌的合法移动判断。这里需要考虑牌的大小关系、花色匹配以及空列的处理。此外...

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

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

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

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

    Lzma压缩文件算法-java单文件版

    Lzma压缩文件算法-java单文件版,编译直接通过,压缩率极高

    蜘蛛纸牌JAVA程序

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

Global site tag (gtag.js) - Google Analytics