如何随机抽取5个不同的值?

Sayiod 2009-07-30 09:08:53
目的是:从1-33个数里面随机抽取5个不同的值,并显示出来。
问题是:下面的code已经实现了随机抽取5个值,但是并没有过滤相同的值。我要怎么判断才能实现抽取不同的值出来?大脑适中%……


public class welcome 
{
public static void main(String[] args)
{
int n = 33;
int[] oriNumber = new int[n];
for(int i=0; i<oriNumber.length; i++)
{
oriNumber[i] = i + 1;
}

int k = 5;
int[] resultNumber = new int[k];
for(int i=0; i<resultNumber.length; i++)
{
int randNumber = (int)((Math.random()*oriNumber.length)+1);
resultNumber[i] = randNumber;
System.out.print(resultNumber[i] + " ");
}
}
}
...全文
242 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
lixiaoyan3 2009-07-30
  • 打赏
  • 举报
回复
楼上那位的也可以
public static void main(String[] args) {
List list =new ArrayList();
while(list.size()<5){
int num=new Double(Math.random()*10).intValue();
if(!list.contains(num)){
list.add(num);
}
}
System.out.println(list);
}
无论放在list还是map都可以
lixiaoyan3 2009-07-30
  • 打赏
  • 举报
回复
public static void main(String[] args) {
Map map=new HashMap();
while(map.size()<5){
int num=new Double(Math.random()*10).intValue();
map.put(num, num);
}
}
这样取出来的数据就是不重复的!
zhoube123 2009-07-30
  • 打赏
  • 举报
回复
初学者,不知上面说的是否是这个意思呢?才看到这个地方,有什么不对的地方,希望大家指正,谢谢!

import java.util.*;
public class welcome
{
public static void main(String[] args)
{
int n = 33;
int[] oriNumber = new int[n];
for(int i=0; i<oriNumber.length; i++)
{
oriNumber[i] = i + 1;
}

int k = 5;
int[] resultNumber = new int[k];
Set s = new HashSet() ;
for(int i=0; i<resultNumber.length; i++)
{
s.add((int)((Math.random()*oriNumber.length)+1));
}
Iterator it = s.iterator() ;
while(it.hasNext())
{
System.out.print(it.next()+" ") ;
}
}
}
landyou9 2009-07-30
  • 打赏
  • 举报
回复
用list好。
.....
List arr = new ArrayList();
if(!arr.contains()){ //如果不包含则放入list中
arr.add();
}
Sayiod 2009-07-30
  • 打赏
  • 举报
回复
这么多人不好给分呀,呵呵。参与的都给了,非常感谢!
rengh8288 2009-07-30
  • 打赏
  • 举报
回复

/**
* 生成【being, end}之间不重复的随机数
*
* @param begin
* 开始值
* @param end
* 结束值
* @param count
* 个数
*
* @return int[]
*/
public static int[] noRepRandoms(int begin, int end, int count) {
int[] tmpArray = new int[end - begin];

for (int i = 0; i < tmpArray.length; i++, begin++)
tmpArray[i] = begin;

int[] results = new int[count];

Random rd = new Random();

int tmpIndex = 0, len = tmpArray.length;

for (int i = results.length - 1; i >= 0; i--) {
tmpIndex = Math.abs(rd.nextInt() % len);
len--;
results[i] = tmpArray[tmpIndex];
tmpArray[tmpIndex] = tmpArray[len];
}

return results;
}
redlotus_lyn 2009-07-30
  • 打赏
  • 举报
回复
/**
* @param args
*/
public static void main(String[] args) {

String select[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10",
"11", "12", "13", "14", "15", "16", "17", "18", "19", "20",
"21", "22", "23", "24", "25", "26", "27", "28", "29", "30",
"31", "32", "33" };

String[] select5 = new String[5];

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

int val = (int) (Math.random() * 33);

select5[i] = select[val];

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

if (select5[j] == select[val]) {

i--;
break;
}
}
}

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

System.out.println("Random" + (i + 1) + ":" + select5[i]);
}
}
quqiujie 2009-07-30
  • 打赏
  • 举报
回复
楼上的效率很低,for里面taofor循环

还是放到set中好
viszl 2009-07-30
  • 打赏
  • 举报
回复
public class randomTest {

public static void main(String[] args) {
int random[]=new int[5];
for(int i=0;i<random.length;i++){
random[i]=(int)(Math.random()*33);
for(int j=0;j<i;j++){
if(random[j]==random[i]){
i--;
break;
}
}
}
for(int i=0;i<random.length;i++){
System.out.print(random[i]+" ");
}

}


}
Sayiod 2009-07-30
  • 打赏
  • 举报
回复
没看明白....初学者,呵呵
jinxinxin1314 2009-07-30
  • 打赏
  • 举报
回复
支持1楼的,将取到的值放到Set里进行过滤!
zhuzhusany 2009-07-30
  • 打赏
  • 举报
回复
放Set里,直到size==5?

62,629

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧