为了账号安全,请及时绑定邮箱和手机立即绑定

请大牛指教,为什么我运行到开始发牌就停住了?

System.out.println("******开始发牌******");
		     int[] s=new int[4];
		     int i=0;
		     int index;
		    while(i<4){
		    	 index=(int)(Math.random()*52);
		    	for(int j=0;j<i;j++){
		    	if(s[j]==index) 
		    		{
		    		break;	
		    		}
		    	else{
		    		s[i]=index;i++;
		    	}
		    	
		     }
		    }
		     System.out.println("玩家"+player1.name+"拿牌");
		     handCard1.add(cardToGet.get(s[0]));
		     System.out.println("玩家"+player2.name+"拿牌");
		     handCard2.add(cardToGet.get(s[1]));
		     System.out.println("玩家"+player1.name+"拿牌");
		     handCard1.add(cardToGet.get(s[2]));
		     System.out.println("玩家"+player2.name+"拿牌");
		     handCard2.add(cardToGet.get(s[3]));
	        System.out.println("******发牌完毕******");

上面的添加玩家是可行的,就没放上来。我是这么想的:牌组是名为cardToGet的List,手牌分别是名为handCard1和handCard2的List,在一个数组里随机无序地放上4个1-52之间的整数,while里面嵌套一个for循环是为了使数组里面的数不重复,给玩家发牌直接把数组里面的数作为索引获取cardToGet里的元素,这样就实现了给两名玩家没人随机发两张牌,但是运行到开始发牌就没下文了。。。求指教啊!

正在回答

2 回答

int[] s = new int[4];

int i =1;

int index;

boolean flag ;

while(i<=4){

flag = true;

index = (int)(Math.random()*52);

for(int j =0;j<i;j++){

if(s[j] == index){

flag = false;

break;

}

}

if(flag){

s[i-1] = index;

i++;

}

}


0 回复 有任何疑惑可以回复我~
#1

Juneava 提问者

非常感谢!
2016-10-27 回复 有任何疑惑可以回复我~
#2

改变D 回复 Juneava 提问者

不客气
2016-10-27 回复 有任何疑惑可以回复我~

你的代码无法跳进while里面的for循环


0 回复 有任何疑惑可以回复我~
#1

Juneava 提问者

代码按顺序执行,进入while循环,得到index后为什么进不去for循环呢?我是新手。。
2016-10-27 回复 有任何疑惑可以回复我~
#2

Juneava 提问者 回复 Juneava 提问者

是因为for循环的条件j<i吗
2016-10-27 回复 有任何疑惑可以回复我~
#3

改变D 回复 Juneava 提问者

是的,你0<0,判断条件直接进不了第一次循环
2016-10-27 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

请大牛指教,为什么我运行到开始发牌就停住了?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信