A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高境 金牌黑马   /  2012-12-22 11:44  /  2336 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 高境 于 2012-12-22 19:58 编辑

public class Card{
                                public static void main(String[] args) {
        int[] p=new int[54];
for(int i=1;i<54;i++){
p=i;
double  b=Math.random()*50+1;
int c=(int)b;
if(c>=i){
int temp=p;
p=p[p.length-1];
p[p.length-1]= temp;
}
System.out.println(p);
  }
}
}怎样才能输不出来0

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

9 个回复

倒序浏览
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/*
* 模拟洗牌
*/
public class PokerDemo {
        // 定义数组,表示花色和牌值
        private String[] types = { "方块", "草花", "红心", "黑桃" };
        private String[] values = { "2", "3", "4", "5", "6", "7", "8", "9", "10",
                        "J", "Q", "K", "A" };
        // 定义一个用于存储扑克牌的集合
        public List<String> list = new ArrayList<String>();

        // 把牌给装到牌盒里
        public void init() {
                for (int x = 0; x < types.length; x++) {
                        for (int y = 0; y < values.length; y++) {
                                list.add(types[x] + values[y]);
                        }
                }
        }

        public static void main(String[] args) {
                PokerDemo pd = new PokerDemo();
                // 调用初始化方法,把牌放到牌盒
                pd.init();
                // 洗牌
                System.out.println("洗牌前:" + pd.list);
                Collections.shuffle(pd.list);
                System.out.println("洗牌前:" + pd.list);
        }
}
自己写的模拟洗牌程序,看看对你有没有帮助

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
class Card{
        public static void main(String[] args) {
        int[] p=new int[54];
        for(int i=1;i<54;i++){
        p[i]=i;
        double  b=Math.random()*50+1;
        int c=(int)b;
       
        if(c>=i){
                if(p[p.length-1]!=0)//如果不打乱顺序的话可以这样写。不会出现0.
                {
                        int temp=p[i];
                        p[i]=p[p.length-1];
                        p[p.length-1]= temp;
                }
        }
       
        System.out.println(p[i]);
         }
        }
}
//因为数组在已建立的时候会有一次初始化动作,即默认初始化,会把数组中的所有元素值设为0,所以,即使你不是从0开始赋值,比较的时候因为交换位置,依然会把后面初始化为0的元素交换到前面,才会出现0,因为数组默认初始化为0,所以这个用数不太好做,用集合好一些

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
//补充一下。这样写不会打印出0,也可以实现你说的洗牌动作。
class Card{
        public static void main(String[] args) {
        int[] p=new int[54];
        for(int i=1;i<54;i++){
        p[i]=i;
        double  b=Math.random()*50+1;
        int c=(int)b;
       
        if(c>=i){
                if(p[p.length-c]!=0)//判断需要交换的元素是不是0,是0就不交换。
                {
                        int temp=p[i];
                        p[i]=p[p.length-c];// 把p.length-1改为p.length-c可以实现打乱顺序。
                        p[p.length-c]= temp;
                }
        }
       
        System.out.println(p[i]);
         }
        }
}
回复 使用道具 举报
哥们 请问一下啊这个题的思路是什么呀
,最好详细点谢谢:loveliness:                         
回复 使用道具 举报
楼主好像不在,我告诉你吧,思路应该是这样的,
首先建立一个长度为54的数组,用for循环进行遍历,同时进行赋值操作,然后将已赋的值与Math.random()*50+1生成的随机数进行比较Math.random()生成的是double类型的0-1之间的随机数,判断随机数与已赋的值的大小,若随机数大于或等于已赋的值,就在数组内部进行一次交换位置的动作,依次循环,这样每赋值一次、判断比较、交换位置一次、实现打乱次序的目的。
这是我根据代码判断出来的,如果不是很准确欢迎指出错误。
回复 使用道具 举报
高境 金牌黑马 2012-12-22 17:59:27
7#
焦健 发表于 2012-12-22 17:44
楼主好像不在,我告诉你吧,思路应该是这样的,
首先建立一个长度为54的数组,用for循环进行遍历,同时进行 ...

:lol考六级去的~~
回复 使用道具 举报
焦健 高级黑马 2012-12-22 18:08:34
8#
高境 发表于 2012-12-22 17:59
考六级去的~~

:o  好厉害的说、我外语很烂的,很想学但总是坚持不下去,唉,要是有学习java这劲头就好了、、
回复 使用道具 举报
陈进 中级黑马 2012-12-24 18:44:25
9#
值得学习啊,,,,,,,,,,,
回复 使用道具 举报
{:soso_e191:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马