我想生成0到1000之间永远不会重复的唯一随机数(即6不会出现两次),但这并不是像以前的值的O(N)搜索那样.这可能吗?
我试图获得0到100之间的随机数.但是我希望它们是唯一的,而不是在序列中重复.例如,如果我得到5个数字,它们应该是82,12,53,64,32而不是82,12,53,12,32我使用它,但它在序列中生成相同的数字.
Random rand = new Random();
selected = rand.nextInt(100);
Run Code Online (Sandbox Code Playgroud) 我有一个操作非常大的列表的功能,超过大约250,000个项目.对于大多数这些项目,它只是替换位置x处的项目.但是,对于它们中的大约5%,它必须从列表中删除它们.
使用LinkedList似乎是避免昂贵删除的最明显的解决方案.然而,自然地,随着时间的推移,通过索引访问LinkedList变得越来越慢.这里的成本是几分钟(其中很多).
在LinkedList上使用Iterator也很昂贵,因为我似乎需要一个单独的副本来避免在编辑该列表时出现Iterator并发问题.这里的费用是几分钟.
然而,这是我的思绪被吹嘘的地方.如果我更改为ArrayList,它几乎立即运行.
对于包含297515个元素的列表,删除11958个元素并修改其他所有元素需要909ms.我确认结果列表的大小确实是285557,如预期的那样,并包含我需要的更新信息.
为什么这么快?我查看了JDK6中ArrayList的源代码,它似乎正在按预期使用arraycopy函数.我很想理解为什么ArrayList在这里工作得很好,当常识似乎表明这个任务的数组是一个可怕的想法,需要移动几十万个项目.
该问题给出了所有必要的数据:在给定区间[0,N-1]内生成一系列K个非重复整数的有效算法是什么.平凡算法(产生随机数,并把它们添加到序列,看着他们,看看他们是否已经在那里之前)是非常昂贵的,如果ķ大且足够接近ñ.
在从链表中有效地选择一组随机元素中提供的算法似乎比必要的更复杂,并且需要一些实现.我刚刚发现了另一种似乎可以完成工作的算法,只要您知道所有相关参数,只需一次通过即可.
我知道如何使用java Random class随机数.
这将随机出现0-13 13次之间的数字;
public static void main(String[] args) {
int ctr = 13;
int randomNum = 0;
while(ctr != 0) {
Random r = new Random();
randomNum = r.nextInt(13);
ctr--;
System.out.println(ctr +": " + randomNum);
}
}
Run Code Online (Sandbox Code Playgroud)
题
- 我想在0-13之间随机输入13次
- 如果第一个随机数是例如(5),那么我的第二个随机数将从0-13中随机任意一个数字,排除5 ;
如果第二个随机数是例如(4),那么我的第三个随机数将从0-13中随机任意一个,排除5和4 ; 等等.有没有办法做到这一点?
任何人都可以告诉我如何生成随机数,没有重复的例子
random(10)应该(可能)返回3,4,2,1,7,6,5,8,9,10而不重复
谢谢
嘿我正在尝试创建一个程序,生成一个只允许使用一次的随机数.对不起,如果那令人困惑,我会试着解释一下.我希望有一个程序从1-100生成数字,但是如果它生成33,那么对于剩余的数字生成过程33不能再生成,所以我应该以100个不同的数字结束.非常感谢任何帮助,谢谢.
到目前为止,这是我的尝试
public class Seed {
public static void main(String[] args) {
// TODO Auto-generated method stub
int a =0;
for (int i =0; i <20;i++) {
a = (int) Math.ceil(10 * Math.random()) ;
System.out.println(a);
int x = a;
System.out.println("This is x: " + x);
if (x == a )
{
a = (int) Math.ceil(10 * Math.random()) ;
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 我正在使用9图像视图我想要随机设置图像到imageview,当我点击刷新按钮,但我尝试这样它是为图像的随机分配工作,但它一次在两个(或)三个imageview中重复相同的图像.我的代码中的问题在哪里..
final int[] imageViews = {
R.id.imgview11, R.id.imgview12, R.id.imgview13,
R.id.imgview21, R.id.imgview22, R.id.imgview23,
R.id.imgview31, R.id.imgview32, R.id.imgview33 };
final int[] images = {
R.drawable.i1, R.drawable.i2, R.drawable.i3,
R.drawable.i4, R.drawable.i5, R.drawable.i6,
R.drawable.i7, R.drawable.i8, R.drawable.empty };
final ImageButton shuffle = (ImageButton) findViewById(R.id.new_puzzle);
shuffle.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Random generator = new Random();
//int n = 9;
//n = generator.nextInt(n);
//Random random = new Random(System.currentTimeMillis());
for(int v : imageViews) {
ImageView iv = (ImageView)findViewById(v);
iv.setImageResource(images[generator.nextInt(images.length - 1)]);
}
}
});
Run Code Online (Sandbox Code Playgroud)
我不想重复,一个图像仅适用于一个imageview ..
我知道JAVA Random类及其用法.但我想生成一个随机数,在该范围内的所有数字至少生成一次之前,不应重复该数字.任何人都可以提供一些参考..?
在使用Random类时,我遇到的问题是有些数字会重复2到3次,而有些则根本没有生成.我的应用程序可能会在这种情况下失败,因为我有另一个线程根据生成的数字处理一些请求....当有延迟并且下一个唯一数字不可用时,它会在不处理非生成数字的情况下停止...
如何在1到9之间生成9个随机数,不重复,一个接一个.它就像:假设生成的第一个随机数是4,那么下一个随机数必须在[1,9] - {4}中.我的第一种方法是将每个随机生成的数字添加到一个集合中,从而避免重复.但是在更糟糕的情况下,就像我们已经生成6并且我们必须再生成3个数字一样,这个过程有点慢.当范围从[1,9]变为[1,1000]时,这种方法听起来不正确.任何人都可以提出另一种方法.
random ×8
java ×7
algorithm ×4
android ×1
arraylist ×1
arrays ×1
image ×1
imageview ×1
math ×1
optimization ×1
performance ×1
permutation ×1