已有258人关注
JavaSe一维数组,洗牌问题
发表在Java答疑区 2019-05-29 悬赏:20 学分
是否精华
版块置顶:

public class Try {


public static void main(String[] args) {

final int Num = 52;

int[] cards = new int[Num];

for (int i = 0; i < cards.length; i++) {

cards[i] = i;

}


System.out.println("洗牌前:");

for (int i = 0; i < cards.length; i++) {

System.out.print(cards[i]);

if ((i + 1) % 13 == 0) {

System.out.println();

} else {

System.out.print(", ");

}

}


// 洗牌

for (int i = 0; i < cards.length; i++) {

int newIndex = (int) (Math.random() * Num);// 0-51之间 有重复且无序的数字

int temp = cards[i];// 0-51有序、无重复数字

cards[i] = cards[newIndex];

cards[newIndex] = temp;


}


System.out.println("洗牌后:");

for (int i = 0; i < cards.length; i++) {

System.out.print(cards[i]);

if ((i + 1) % 13 == 0) {

System.out.println();

} else {

System.out.print(", ");

}

}


}


}



在洗牌的代码段中,为什么去掉int temp = cards[i]和cards[newIndex] = temp;这段代码,会导致洗牌后的数组中出现重复的数字? 

分享到:
精彩评论 4
根号申
学分:4736 LV12
TA的每日心情
2021-07-16 23:48:46
2019-05-29
沙发

哪本书中的哪个项目?

MarsGump
学分:88 LV3
2019-05-29
板凳

根号申 发表于2019-05-29 10:28

哪本书中的哪个项目?

您好,老师。这是贵公司网站上的JAVA体系课程中,数组的使用<从一副牌中随机抽取4张扑克牌>这个题目的代码。

MarsGump
学分:88 LV3
2019-05-29
地板

MarsGump 发表于2019-05-29 17:14

您好,老师。这是贵公司网站上的JAVA体系课程中,数组的使用<从一副牌中随机抽取4张扑克牌>这个题目的代码。

这是我按照网站上的代码,自己改写的。但是始终不明白,为什么要用循环变量temp。如果不使用temp的话,运行的结果就会出现重复的数字。

根号申
学分:4736 LV12
TA的每日心情
2021-07-16 23:48:46
2019-05-31
4L

我不清楚你的疑问,和你描述的重复数字是什么场景?temp是临时变量,用来交换其他两个变量值时使用的。代码随机交换数组中两个变量的值,不会出现重复数据。如果出现了重复数据说明没有正确执行交换过程。

首页上一页 1 下一页尾页 4 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照