我一直在解决这个问题。
我需要编写一个程序,以产生数字1到10的随机排列。
我解决这个问题的策略是:
要生成随机排列,您需要用数字1到10填充ArrayList,以便该数组的两个条目都不 具有相同的内容。我想避免调用Random.nextInt()。而是通过创建第二个ArrayList并用数字1到10填充它来实现更智能的方法。然后随机选择其中一个,将其删除,然后将其附加到置换ArrayList中。重复十次。
这基本上是我的:
import java.util.ArrayList;
import java.util.Random;
public class P4_Icel_Murad_Permutations
{
public static void main(String[] args){
ArrayList <Integer> myArrayList = new ArrayList <Integer> ();
P4_Icel_Murad_Permutations obj = new P4_Icel_Murad_Permutations();
obj.perma(10,1,10);
}
static java.lang.Object[] perma(int n, int a, int b){
ArrayList <Integer> myArrayList = new ArrayList <Integer> ();
ArrayList <Integer> randomized = new ArrayList <Integer> ();
randomized.add(new Integer(1));
randomized.add(new Integer(2));
randomized.add(new Integer(3));
randomized.add(new Integer(4));
randomized.add(new Integer(5));
randomized.add(new Integer(6));
randomized.add(new Integer(7));
randomized.add(new Integer(8));
randomized.add(new Integer(9));
randomized.add(new Integer(10));
for(Integer N: randomized){
Random r = new Random();
randomized.remove(r);
myArrayList.add(N);
}
}
}
我的问题是我不太确定如何通过删除数字并将其添加到myArrayList来从其他列表中获取。我似乎无法使用r,因为它是原始类型,而且我不知道如何为随机类创建对象。
提前致谢!
您可以做的只是随机ArrayList
使用Collections.shuffle()
。
ArrayList <Integer> randomized = new ArrayList <Integer> ();
randomized.add(new Integer(1));
randomized.add(new Integer(2));
randomized.add(new Integer(3));
randomized.add(new Integer(4));
randomized.add(new Integer(5));
randomized.add(new Integer(6));
randomized.add(new Integer(7));
randomized.add(new Integer(8));
randomized.add(new Integer(9));
randomized.add(new Integer(10));
Collections.shuffle(randomized);
System.out.println(randomized);
这样可以避免使用单独arrayList
的逻辑来获得随机数并删除该特定索引。换句话说,最佳
与您的代码的问题是,随机数产生一定的范围0
来size - 1
,你不采取的照顾。
Random rand = new Random();
while(randomized.size() != 0)
{
int randomNum = rand.nextInt(randomized.size());//produces a number within the range.
myArrayList.add(randomized.get(randomNum));
randomized.remove(randomNum);
}
System.out.println("List 1: " + randomized);
System.out.println("List 2: " + myArrayList);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句