我在Java中创建随机数生成器作为我正在编写的程序的一部分,以便更好地学习语言(来自更多的C#/ C ++背景)。
ArrayList<Integer> al = new ArrayList<Integer>();
Random ran = new Random();
for(int i = 1; i <= 11; i++)
al.add(i);
for(int i = 0; i < 2; i++)
{
ArrayList<Integer> temp = new ArrayList<Integer>();
int num = al.remove(ran.nextInt(al.size()));
temp.add(num);
Arrays.sort(temp);
text("\Random Number " + i + " is: " + temp[i]);
}
在arrays.sort(temp)上我得到一个没有合适的方法错误,在我的文本输出函数中,我需要数组,但找到了java.util.ArrayList。任何人都可以建议一个更好的方法来将这个随机数字数组按升序排序,或者看到我目前做错的事情很容易纠正吗?感谢。
答案 0 :(得分:4)
使用Collections.sort(temp)
。
在Java中,数组和列表是两种不同的野兽。 Arrays.sort()
仅适用于数组;列表的等效函数是Collections.sort()
。
我不能说我完全理解您的代码背后的逻辑,但您可能还想看看Collections.shuffle()
。
编辑仔细检查后,代码还有其他问题:
temp
,因此在每次循环迭代时,它将只包含一个元素。temp[i]
在语法上无效;正确的语法是temp.get(i)
。即使使用正确的语法,它也会给你一个“越界”异常,因为temp
只包含一个元素。答案 1 :(得分:3)
排序ArrayList时,您应该使用:
Collections.sort();
在您的情况下,我建议您使用TreeSet,它会为您提供一个已排序的集合(它会在每次添加或删除后自行排序。此外,它会阻止您添加重复的元素。
TreeSet<Integer> randomSet = new TreeSet<Integer>();
Random ran = new Random();
while(randomSet.size() < 3) {
randomSet.add(Math.abs(ran.nextInt()) % 11 + 1); //+1 to adjust your range [1..11]
}
for (int i : randomSet)
System.out.println(i);
Math.abs()保证您只有正数,并且可以使用%运算符来设置最大值。
有关添加的更多信息来自oracle docs:
如果此set已包含该元素,则调用将保持set不变并返回false。
答案 2 :(得分:1)
您可以使用Collection
课程对ArrayList
:
ArrayList<Integer> al =new ArrayList<Integer>();
Collections.sort(al , new Comparator<Integer>()
{
public int compare(Integer a, Integer b) {
return a.compareTo(b) ;
}
});
所以现在al
有一个排序列表。
答案 3 :(得分:0)
它会:
Collections.sort();