首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 那个哥哥能帮下我........作业不会做了 [已结贴,结贴人:jaysen_elf]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-14 20:31:40 楼主
    编写一个扑克牌的洗牌的算法:假设有54张牌,分别用1-54的数字来表示,并保存在一个数组中,设计一个算法使数组中的数字随机存放,并且无重复和缺失的现象。打印洗牌前后的结果。要求用2种方法实现,并找出较为优化的一种;
     
      就这个题  我才开始学JAVA  明天老师要检查~~    那个哥哥能帮帮我
     
      我学到2维数组了~~       
    我谢谢大家了~~ 
    真的很头疼~~~~~
    10  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-14 21:18:521楼 得分:10
    ///只有1个方法
    import java.util.Random;
           
    public class Code {
       
        /** Creates a new instance of Code */
        public Code() {
            this.r=new Random();
            this.codes=new int[54];
        }

        public void xiPai(){
            for (int i=0;i <54;i++){
                int n=r.nextInt(54)+1;
                this.codes[i]=n;
                for (int j=0;j <i;j++){
                    if (this.codes[j]==n){
                        i--;
                        break;
                    }
                }
            }
        }
       
        public void printCode(){
            for (int i=0;i <54;i++){
                if (i%10==0)
                    System.out.println();
                System.out.print(this.codes[i]+" ");
            }
        }
       
        public static void main(String[] args){
            Code c=new Code();
            c.xiPai();
            c.printCode();
        }
       
        private int[] codes=null;
        Random r=null;
    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-14 21:34:532楼 得分:0
    谢谢了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-14 21:43:213楼 得分:0


    //package com.lihaifeng.common;

    public class Print13 {
    public static void main(String[] args) {
    int puKePai;//定义产生的一张扑克牌
    int n = 0;//
    int[] puKe = new int[54];//定义存放扑克牌的数组
    temp: while (n < 54) {//产生随机数,既随机产生扑克点数

    puKePai = (int) ((Math.random() * 100)) % 54 + 1;//产生1到54的随机数;
    for (int k = 0; k < n; k++) {
    if (puKePai == puKe[k])//产生的随机数与数组里的数比较,如果已经存在,则跳出循环重新产生
    continue temp;
    }
    puKe[n] = puKePai;//产生的随机数不存在数组里,放入数组中;
    n++;//

    }
    for (int m = 1; m < 55; m++) {//打印产生的扑克牌;
    System.out.print(m + ": " + puKe[m - 1] + "  ");
    if (m % 10 == 0) {
    System.out.println("  ");
    }
    }

    }
    }

    上面的代码不知道是不是你要的意思!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-15 00:44:264楼 得分:0
    可以写得更简单点
    Java code
    public class Main { public static void main (String[] args) { final int n = 54; int[] iarr = new int[n]; java.util.Random r = new java.util.Random (); int j = 0; while(j < n) { int x = r.nextInt (n); if (iarr[x] == 0) { j++; iarr[x] = j; } } for (int a : iarr) { System.out.print (a + " "); } } }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-15 02:17:055楼 得分:0
    谢谢了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-22 18:23:276楼 得分:0
    import java.util.Random;

    public class appletTest {
    public static void main(String[] args) {
    int[] puKe = new int[54];// 定义存放扑克牌的数组
    Random r = new Random();
            int i=0;
    while(i <54){
    int temp=0;
    int current = Math.abs(r.nextInt()) % 54 + 1;
    for (int j = 0; j < i; j++) {
    if (puKe[j] == current){
    temp=1;
    break;
    }
                  }
    if(temp==0){
    puKe[i] = current;
    ++i;
    }
        }
    for (int m = 1; m < 55; m++) {// 打印产生的扑克牌;
    System.out.print(m + ": " + puKe[m - 1] + "  ");
    if (m % 10 == 0) {
    System.out.println("  ");
    }
    }

    }
    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-22 20:03:417楼 得分:0
    呵呵 这个有次面试的时候做过一次
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-23 12:32:098楼 得分:0
    上面的高手不少啊!学习之中......!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dyw31415926
    • 等级:
    发表于:2007-10-23 13:39:149楼 得分:0
    上面的做法,要注意:有个细节,当不是第一张牌时,都有一个动作,取一个随机数,然后看是否已经存在与
    前面分配的数相同,相同的话,就要另取随机数?????也就是说,第n张牌是某张指定的牌的几率就不是
    1/54了,这样就没有达到随机的目的,只能称为假随机?,当然在不太严格的情况下这样做也是可以的,满足了
    一般的需求。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-28 05:23:3310楼 得分:0
    我觉得很麻烦的一个程序原来可以这么简单啊~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-31 14:20:5311楼 得分:0
    填写注册表单的随机码就是这么产生的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-31 15:29:3112楼 得分:0
    不过那个要画出歪歪妞妞的图出来。。自己写画图的算法还是比较麻烦的吧
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-10-31 20:21:3913楼 得分:0
    都是高手啊~!各位大侠叫教教我这个小虾米啊~!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-02 20:42:5014楼 得分:0
    个人最喜欢4楼的
    简单明了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2007-11-02 21:17:2915楼 得分:0
    for (int a : iarr) 是什么意思?
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved