| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 625 人关注过本帖
标题:为什么无法进行多次相同循环?
只看楼主 加入收藏
chengsencs
Rank: 1
等 级:新手上路
帖 子:109
专家分:0
注 册:2006-7-24
收藏
 问题点数:0 回复次数:7 
为什么无法进行多次相同循环?

D:\>public class AAA
{
public static void main(String[] args)
{ int c=10;
int[] a=new int[c];
for(int i=0;i < c; i++)
{ a[i] = i + 1;
}

for(int m=1;m<5;m++)
{
int[] b=new int[c];
for(int i=0;i < 10; i++)
{
int r=(int)(Math.random()*c);
b[i]=a[r];
a[r]=a[c-1];
c--;

}
c=10;
System.out.print("第"+m+"个:");
for(int i=0;i < 10; i++)
{
System.out.print( " "+ b[i]);
}
System.out.println();

}
}
}

代码要求很简单:对1-10进行4次相互独立的随机排列并且打印出来,但是结果却很奇怪:

D:\>javac AAA.java

D:\>java AAA
第1个: 8 2 6 5 7 10 9 1 3 4
第2个: 7 4 10 3 4 10 4 9 10 10
第3个: 10 9 10 10 4 10 10 10 10 10
第4个: 9 10 10 10 10 10 10 10 10 10

除了第一个正常之外,其他几个都或多或少的减少了取值范围。
为什么?请清楚的朋友帮忙解答一下。
谢谢。

搜索更多相关主题的帖子: public AAA void String main 
2006-12-02 21:10
阅逡
Rank: 1
等 级:新手上路
帖 子:103
专家分:0
注 册:2006-12-1
收藏
得分:0 
呵呵,我帮你看一下吧

2006-12-02 21:58
阅逡
Rank: 1
等 级:新手上路
帖 子:103
专家分:0
注 册:2006-12-1
收藏
得分:0 

我帮你改了一下,不知道你是不是要这种效果:

public class test{

public static void main(String[] args)
{ int c=10;
int[] a=new int[c];
for(int i=0;i < c; i++)
a[i] = i + 1;


for(int m=1;m<5;m++)
{
int[] b=new int[c];
for(int i=0;i < 10; i++)
{
int r=(int)(Math.random()*c);
b[i]=a[r];
//a[r]=a[c-1];
// c--;

}
c=10;
System.out.print("第"+m+"个:");
for(int i=0;i < 10; i++)
{
System.out.print( " "+ b[i]);
}
System.out.println();

}
}

}


2006-12-02 22:00
chengsencs
Rank: 1
等 级:新手上路
帖 子:109
专家分:0
注 册:2006-7-24
收藏
得分:0 

好像也不大对耶....

我希望是这种效果:
D:\>javac AAA.java

D:\>java AAA
第1个: 8 2 6 5 7 10 9 1 3 4
第2个: 9 5 4 8 6 3 1 2 7 10
第3个: 1 8 7 9 3 2 6 5 10 4
第4个: 4 3 1 2 10 5 9 7 6 8

实在是晕头了....
谢谢。

2006-12-03 09:12
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
收藏
得分:0 
你程序里面的c不要递减,一直都必须要是那个数组的长度
这样你才能保证交换的范围是整个数组

可惜不是你,陪我到最后
2006-12-03 09:21
chengsencs
Rank: 1
等 级:新手上路
帖 子:109
专家分:0
注 册:2006-7-24
收藏
得分:0 
还是不大明白。
我在c递减到0之后,把它的值用c=10;
又恢复到了原来的10。为什么下一次的循环会减少取值范围呢?
请冰封讲一下应该怎样做。
2006-12-03 15:13
myfor
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:357
专家分:6
注 册:2006-3-13
收藏
得分:0 
public class AAA
{
public static void main(String[] args)
{ int c=10;
int[] a=new int[c];
for(int i=0;i < c; i++)
{ a[i] = i + 1;
}

for(int m=1;m<5;m++)
{
int[] b=new int[c];
for(int i=0;i < 10; i++)
{
int r=(int)(Math.random()*c);
b[i]=a[r];
a[r]=a[c-1];
a[c-1]=b[i];//交换必须要这步
c--;

}
c=10;
System.out.print("第"+m+"个:");
for(int i=0;i < 10; i++)
{
System.out.print( " "+ b[i]);
}
System.out.println();

}
}
}

广告位招租
2006-12-03 16:20
chengsencs
Rank: 1
等 级:新手上路
帖 子:109
专家分:0
注 册:2006-7-24
收藏
得分:0 
原来如此,第一次随机取值之后,数组a[]已经被重新赋值了,所以即使把c的值在变成10,取值的范围也要局限在一次循环后的a[]数组中的数值。而第一次for循环要让r每次依次随即取得10、9、8、7、6、5、4、3、2、1,按概率论来说是几乎不可能的了。更别说第三、第四次随机取值了。

真是没有想到。
谢谢各位。
2006-12-06 15:49
快速回复:为什么无法进行多次相同循环?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015239 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved