`
_橙子
  • 浏览: 12145 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

生成随机数从数组里随机取值

    博客分类:
  • java
阅读更多

前短时间朋友发来一个题,说是面试题,这几天悠闲着拿出瞧瞧。
如题:定义一个整形数组,长度不限,值不限,要求用随机数取出来并打印,值不能取重复的,用最少循环次数解决刚开始看到的时候就分析了下:
1、数组长度不限,值不限,可能有重复值
2、随机数有一样的值,根据下标去取的话会取到一样的值
当时想到用递归去判断(由于代码繁琐,效率不高,这里就不贴出来了),判断如果这个随机数没出现就去取取了递归一次重来,这样做的性能很差,所以最后放弃了。
然后想到取一个删一个,但是数组没有删除的方法,于是想到了把数组转成集合,因为集合有移除的方法,取一个移一个,最后取完为止,这是我目前想到效率相对来说快一点的。
把代码贴出来,因为是用记事本写的,也没运行过,关键字可能会有错,主要还是思想到位,如果各位有更好的还请多指教指教~ 

 

	Integer[] a = new Integer[] { 1, 2, 3, 4, 5 };
		List list = new ArrayList();
		list = Arrays.asList(a);
		Random ran = new Random();
		int intSize = a.length;
		
		for (int I = 0; I < intSize; I++) {
			int o = ran.nextInt(list.size() - 1);
			if (null != list.get(o) && intSize >= 0) {
				System.out.println(list.get(o));
				list.remove(o);
				intSize--;
			} else {
				continue;
			}
		}

 

分享到:
评论
2 楼 _橙子 2010-03-16  

  • List list = Arrays.asList(a);
  • List arrayList = new ArrayList(list);


使用了asList方法后如果要remove集合里面的元素必须先再转一遍
1 楼 _橙子 2010-03-16  
贴上能运行的

public void getInt() {
		Integer[] a = new Integer[] { 1, 2, 3, 4, 5, 5, 6, 33, 15, 95, 885, 45,
				1, 5, 88, 65, 29, 46, 25, 84, 52 };
		//System.out.println(a.length);
		List list = Arrays.asList(a);
		List arrayList = new ArrayList(list);
		int o = 1;
		Random ran = new Random();
		int intSize = a.length;
		int s = 0;
		for (int i = 0; i < a.length; i++) {
			s++;
			System.out.println("循环了" + s + "次");
			if ((intSize - 1) != 0) {
				o = ran.nextInt(intSize - 1);
			}
			if (null != list.get(o) && intSize >= 0) {
				System.out.println(arrayList.get(o));
				arrayList.remove(o);
				intSize--;
			} else {
				intSize++;
				continue;
			}
		}
	}

相关推荐

    kettle 生成随机数.ktr

    生成 100 个随机数,随机数取值于[0,100)之间, 计算小于等于 50 的随机数个数和 大于50 的随机数个 数。 并把这两个统计数字放在数据库表的一行的两列中, 即输出的结果有一行,一行包括两列,每列是一个统 计值...

    php 数组随机取值的简单实例

    array_rand() 在你想从数组中取出一个或多个随机的单元时相当有用。它接受 input 作为输入数组和一个可选的参数 num_req,指明了你想取出多少个单元 - 如果没有指定,默认为 1。 array_rand — 从数组中随机取出一...

    randray:从数组中获取随机项

    从数组中获取随机项 注意: randray仅在iojs和node v4 +上受支持。 要与旧版本的节点一起使用,请使用randray@1 。 安装 $ npm install --save randray 原料药 var randray = require ( 'randray' ) // not an ...

    Python列表中随机取值

    python 列表 随机取值 不用循环从一个list中选择随机的元素

    java利用一维数组统计随机数的个数

    定义一个一维数组,其中存储随即生成的1000个1至100以内的整数,统计每一个整数出现的次数

    数组练习题

    数组练习题!

    顺序数组的实现

    顺序数组的实现 顺序数组的构建 顺序数组的销毁 顺序数组的赋值 顺序数组的取值

    Java Random类的详细介绍(Java生成随机数)

    Java Random类的详细介绍(Java生成随机数)一、Random类的使用1.Random类生成随机数(int)的基本语法:2.几种常用的随机数生成二、Random类的详细介绍1.生成指定范围的数字2.Random.nextInt()与Math.random()的区别 ...

    OC Extension SafeObject(防止数组字典取值越界).zip

    这个工具类的作用是防止,去数组 字典中的值的时候防止越界导致项目崩溃 闪退的问题。有了这个工具类之后,取值越界,数据返回nil,项目不会奔溃的

    【源码】随机取值.iapp

    【源码】随机取值.iapp

    unity 随机数random 工具

    C#写的随机数生成工具,有各种随机取值的方法

    vue遍历对象中的数组取值示例

    今天小编就为大家分享一篇vue遍历对象中的数组取值示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    Vue如何循环提取对象数组中的值

    1.数据如下,提取name和callcount 2代码. getQueryCallStatistics(sesp1, this.provinceId).then((res) =&gt; { let arr = []; let arr1 = []; let arr2 = [];... this.xunshiMap = res.data.callstatistics;...

    从一维数组中提取出矩形

    提取遮挡区域,返回遮挡区域的个数,用0表示不遮挡,用1表示遮挡

    数组逆序程序

    此程序是课程学习中的数组逆序,希望对大家有帮助

    BAT实例:随机抽数程序

    BAT实例,随机抽数程序,设置取值范围最大值,抽取这个值以内的任意一个数,带循环系统,界面简洁实用,可以用在抽取学号

    C语言编写随机生成8位密码

    随机8位密码生成器,rand() 函数来生成随机数,每次srand() 函数来重新“播种”,利用取模的方法取值。

    javascript中json对象json数组json字符串互转及取值方法

    今天用到了json数组和json对象和json类型字符串之间互转及取值,记录一下: 1.json类型的字符串转换为json对象及取值 var jsonString = '{"bar":"property","baz":3}'; var jsObject = JSON.parse(jsonString); //...

Global site tag (gtag.js) - Google Analytics