java语言实现简单的洗牌,发牌

java学习过程中,老师让写了个简单的斗地主洗牌发牌的程序,一下就是程序代码:

package com.java.lei.homework;

import java.util.Arrays;
import java.util.Random;

public class PokerGame {

    //1.创建数组,用以存储扑克牌
    static String[] pokers = new String[54];

    public static void main(String[] args) {
        //2.创建牌  所有的牌赋值到array数组中
        pokers = newPoker();
        //3.洗牌  这里的实参pokers是经过创建牌之后新生成的pokers
        String[] pokers2 = upsetPoker(pokers);
        //4.发牌   
        sendPoker(pokers2);
}

    //创建牌的方法
    public static String[] newPoker() {
        //1.定义花色数组
        String[] colors = {"红桃","黑桃","梅花","方片"};
        //2.定义牌面数组
        String[] numbers = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
        //3.定义王
        String[] kings = {"大王","小王"};

        //4.使用循环将牌存储到pokers数组

        int index = 0;
        for(int i = 0 ; i < numbers.length ; i ++) {
            for(int j = 0 ; j < colors.length ; j ++) {
                pokers[index ++] = colors[j] + numbers[i];
            }
        }

        //5.大小王拷贝入pokers数组
        System.arraycopy(kings, 0, pokers, index, 2);
        //6.输出牌
        System.out.println("现有一副扑克牌" + Arrays.toString(pokers) + "\n");

        return pokers;
    }

    //洗牌的方法
    public static String[] upsetPoker(String[] array) {
        //1.定义新的数组,用以存储洗好的牌
        String[] newpokers = new String[pokers.length];
        //2.定义数组,用以标识被随机取出的牌
        boolean[] mark = new boolean[pokers.length];

        //3.洗牌
        for(int i = 0 ; i < pokers.length ; i ++) {
            //a.创建随机数
            Random rd = new Random();
            //b.获取随机数的下标
            int index = rd.nextInt(pokers.length);
            //c.判断标识
            if(mark[index] == false) {
                //d.将未洗过的牌存储入newpokers
                newpokers[i] = pokers[index];
                //e.修改标识,被洗过的牌标记为true
            }else {
                i --; //该次取随机数取到的是洗过的牌,则重新再取一次
            }
        }

        //newpokers内的牌拷贝到数组pokers
        pokers = Arrays.copyOf(newpokers, newpokers.length);
        System.out.println("洗过的牌:" + Arrays.toString(newpokers)+"\n");
        return newpokers;
    }

    //发牌的方法
    public static void sendPoker(String[] array) {
        //1.定义玩家及底牌数组
        String[] one = new String[0];
        String[] two = new String[0];
        String[] three = new String[0];
        String[] underpoker = new String[3];

        //2.循环进行发牌
        for(int i = 0 ; i < pokers.length-3 ; i++) {
            if(i % 3 == 0) {
                one = Arrays.copyOf(one, one.length+1);
                one[one.length-1] = pokers[i];
            }else if(i % 3 == 1) {
                two = Arrays.copyOf(two, two.length+1);
                two[two.length-1] = pokers[i];
            }else if(i % 3 == 2) {
                three = Arrays.copyOf(three, three.length+1);
                three[three.length-1] = pokers[i];
            }
        }

        System.arraycopy(pokers, pokers.length-3, underpoker, 0, 3);

        System.out.println("玩家1:" + Arrays.toString(one));
        System.out.println("玩家2:" + Arrays.toString(two));
        System.out.println("玩家3:" + Arrays.toString(three));
        System.out.println("底牌:" + Arrays.toString(underpoker));
    }

}
时间: 03-23

java语言实现简单的洗牌,发牌的相关文章

二、Java语言的简单认识及Hello World示例

1. Java语言的简单认识 (1) Java有三个版本: a. JAVA SE (以前称J2SE):Standard Environment 标准版本: b. JAVA EE (以前称J2EE):Enterprise Environment 企业版: c. JAVA ME (以前称J2ME):Eicro Environment 微型版; (2) Java的安装目录 在前一讲中,提到安装目录中有两个文件夹,分别是jdk1.7.0_45和jre7.在"jdk1.7.0_45"文件夹的bi

关于java洗牌发牌小程序

package play.card; public class Card { public String num; public String suit; public Card(String num,String suit) { this.num = num; this.suit = suit; } public Card() { super(); } @Override public String toString() { String str = suit+" "+ num; r

模拟斗地主洗牌、发牌(含有排序和不排序的)

不排序的: package cn.idcast5; import java.util.ArrayList; import java.util.Collections; //模拟斗地主洗牌发牌 //分析 //A 创建一个牌盒 //B 装牌 //C 洗牌 //D 发牌 //E 看牌 public class Shiyue31 { public static void main(String[] args) { // 创建一个牌盒 ArrayList<String> array = new Arra

java语言的特性及应用

java语言定义: Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言. Java 技术具有卓越的通用性.高效性.平台移植性和安全性,广泛应用于PC.数据中心.游戏控制台.科学超级计算机.移动电话和互联网,同时拥有全球最大的开发者专业社群. 组成: Java由四方面组成:●Java编程语言,即语法.●Java文件格式,即各种文件夹.文件的后缀.●Java虚拟机(JVM),即处理*.class文件的解释器.●Java应用程序接口(Java API). Java分为三个体系,分别为Java

JAVA语言学校的危险性

Java语言学校的危险性(译文) 作者: 阮一峰 日期: 2008年12月 7日 下面的文章是More Joel on Software一书的第8篇. 我觉得翻译难度很大,整整两个工作日,每天8小时以上,才译出了5000字.除了Joel大量使用俚语,另一个原因是原文涉及"编程原理",好多东西我根本不懂.希望懂的朋友帮我看看,译文有没有错误,包括我写的注解. ==================== 作者:Joel Spolsky 译者:阮一峰 原文: http://www.joelon

java语言具备的11大特点

中软国际武汉java培训专家介绍java语言具备的11大特点. 1.Java语言是简单的 Java 语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用Java.另一方面,Java丢弃了C++中很少使用的.很难理解的.令人迷惑 的那些特性,如操作符重载.多继承.自动的强制类型转换.特别地,Java语言不使用指针,并提供了自动的废料收集,使得程序员不必为内存管理而担忧. 2.Java语言是一个面向对象的 Java 语言提供类.接口和继承等原语,为了简单起见,只支持类之间的单继承,

java洗牌(shuffle)简单算法(三种实现)

package shuffle;public class shuffle {//入口 public static void main(String[] args) {    pPoker a=new pPoker();    System.out.println("请验牌************");        a.getPokerPoint();    System.out.println();    System.out.println("洗牌中");  

代码实现:模拟斗地主洗牌和发牌并对牌进行排序的代码实现

package com.loaderman.test; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.TreeSet; public class Test{ /** * * A:案例演示 * 模拟斗地主洗牌和发牌并对牌进行排序的代码实现 * * 分析: * 1,买一副扑克,其实就是自己创建一个集合对象,将扑克牌存储进去 * 2,洗牌 * 3,

代码实现:模拟斗地主洗牌和发牌,牌没有排序

package com.loaderman.test; import java.util.ArrayList; import java.util.Collections; public class Test { /** * * A:案例演示 * 模拟斗地主洗牌和发牌,牌没有排序 * * 分析: * 1,买一副扑克,其实就是自己创建一个集合对象,将扑克牌存储进去 * 2,洗牌 * 3,发牌 * 4,看牌 */ public static void main(String[] args) { //1