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("洗牌中");
    a.shuffleOne();
    a.getPokerPoint();
    System.out.println();
    System.out.println("洗牌中");
    pPoker b=new pPoker();
    b.shuffleTwo();
    b.getPokerPoint();
    System.out.println();
    System.out.println("洗牌中");
    pPoker c=new pPoker();
    c.shufffeThree();
    c.getPokerPoint();
    }
}

package shuffle;

public class poker {//牌(数据类型),
    
         public String point;
         public String color;
         public poker(String x,String y)
         {
             point=x;
             color=y;
         }
    
}

package shuffle;

public class pPoker {//洗牌人,洗牌人实现洗牌具体操作
    private poker []poker=new poker[54];
    private String []point;
    private String[] color;
    public pPoker()
    {
        
        point=new String [] {"A","2","3","4","5","6","7","8","9","10","j","Q","k"};
         color=new String []{ "♥", "♣", "♦", "♠"};
         int k=0;
         for(int i=0;i<13;i++)
         {
             for(int j=0;j<4;j++)
               {poker[k]=new poker(point[i],color[j]);k++;}
         }
            poker[52]=new poker("JOKER","小");
            poker[53]=new poker("JOKER","大");
    }
    public poker[] getPokerPoint()
    {
        for(int i=0;i<54;i++)
        {
            System.out.print(poker[i].color+poker[i].point);
        }
        return poker.clone();
    }
    public void shuffleOne()
    {
        String []temC=new String[54];
        String []temP=new String[54];
        for(int j=0;j<3;j++)
        {
        for(int i=0;i<54;i++)
        {
             temC[i]=poker[i].color;
             temP[i]=poker[i].point;
        }
    
        for(int i=0;i<27;i++)
        {
             poker[2*i].color=temC[i+27];
             poker[2*i].point=temP[i+27];
             poker[2*i+1].color=temC[i];
             poker[2*i+1].point=temP[i];
        }
        }
    }
    public void shuffleTwo()
    {
        for(int i=0;i<53;i++)
        {
            int t=(int)(Math.random()*(53-i));
            poker tem=poker[t];
            poker[t]=poker[53-i];
            poker[53-i]=tem;
        }
        
    }
    public void shufffeThree()
    {
        
        for(int i=0;i<54;i++)
        {
            int r=(int)(Math.random()*54);
            if(poker[i]!=poker[r])
            {
                poker temp=poker[i];
                poker[i]=poker[r];
                poker[r]=temp;
            }
        }
    }
}

时间: 2024-11-05 02:21:17

java洗牌(shuffle)简单算法(三种实现)的相关文章

Java中获取键盘输入值的三种方法

Java中获取键盘输入值的三种方法     Java程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值的现成函数!Java没有提供这样的函数也不代表遇到这种情况我们就束手无策,请你看以下三种解决方法吧: 以下将列出几种方法: 方法一:从控制台接收一个字符,然后将其打印出来 import java.io.*; public static void main(String [] args) throws

java小知识点(一)---Java中获取键盘输入值的三种方法

Java中获取键盘输入值的三种方法   程序开发过程中,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值的现成函数!Java没有提供这样的函数也不代表遇到这种情况我们就束手无策,请你看以下三种解决方法吧:   以下将列出几种方法:   方法一:从控制台接收一个字符,然后将其打印出来   publicstatic void main(String [] args) throws IOException{   Sys

Java洗牌、发牌实现

package com.softeem.xipaiDemo; import java.util.ArrayList; import java.util.Collections; import java.util.Random; import java.util.Scanner; public class XiPai { private ArrayList<Pai> p; private int[] a; private int[] a2; private void innitArr(int[]

java Data、String、Long三种日期类型之间的相互转换

java Data.String.Long三种日期类型之间的相互转换 // date类型转换为String类型 // formatType格式为yyyy-MM-dd HH:mm:ss//yyyy年MM月dd日 HH时mm分ss秒 // data Date类型的时间 public static String dateToString(Date data, String formatType) { return new SimpleDateFormat(formatType).format(data

Java反射获取class对象的三种方式,反射创建对象的两种方式

Java反射获取class对象的三种方式,反射创建对象的两种方式 1.获取Class对象 在 Java API 中,提供了获取 Class 类对象的三种方法: 第一种,使用 Class.forName 静态方法. 前提:已明确类的全路径名. 第二种,使用 .class 方法. 说明:仅适合在编译前就已经明确要操作的 Class 第三种,使用类对象的 getClass() 方法. 适合有对象示例的情况下 package com.reflection; /** * Created by Liuxd

Java利用 DES / 3DES / AES 这三种算法分别实现 对称加密

转载请注明出处:http://blog.csdn.net/smartbetter/article/details/54017759 有两句话是这么说的: 1)算法和数据结构就是编程的一个重要部分,你若失掉了算法和数据结构,你就把一切都失掉了. 2)编程就是算法和数据结构,算法和数据结构是编程的灵魂. 注意,这可不是我说的,是无数程序员总结的,话说的很实在也很精辟,若想长久可持续发展,多研究算法还是很有必要的,今天我给大家说说加密算法中的对称加密算法,并且这里将教会大家对称加密算法的编程使用.包含

关于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

漫谈二叉搜索树的基本算法(三种思路实现查询操作)

  前面我们说了二叉树前序中序后序遍历的递归非递归算法的实现,下面我们再来说说二叉搜索树~   二叉排序树分为静态查找(find)和动态查找(insert.delete) 二叉搜索树:一棵二叉树,可以为空:如果不为空,满足下列性质: 1.非空左子树的所有键值小于其根结点的键值. 2.非空右子树的所有键值大于其根结点的键值 3.左右子树都是二叉搜索树!! 2.以上是二叉搜索树(也叫二叉排序树)的一些基本操作,此处我们先说一下二叉树的结点定义·· 代码中判断当前结点位置情况的辅助方法以及简单的 ge

Java中OutOfMemoryError(内存溢出)的三种情况及解决办法

相信有一定java开发经验的人或多或少都会遇到OutOfMemoryError的问题,这个问题曾困扰了我很长时间,随着解决各类问题经验的积累以及对问题根源的探索,终于有了一个比较深入的认识. 在解决java内存溢出问题之前,需要对jvm(java虚拟机)的内存管理有一定的认识.jvm管理的内存大致包括三种不同类型的内存区域:Permanent Generation space(永久保存区域).Heap space(堆区域).Java Stacks(Java栈).其中永久保存区域主要存放Class