Java中的随机数数组-要升序排序吗

Java中的随机数数组-要升序排序吗,java,arrays,sorting,Java,Arrays,Sorting,我正在用Java创建随机数生成器,这是我为更好地学习该语言而编写的程序的一部分(来自更多的C#/C++背景) ArrayList al=new ArrayList(); Random ran=新的Random(); 对于(int i=1;i使用Collections.sort(temp) 在Java中,数组和列表是两种不同的野兽。仅适用于数组;列表的等效函数为 我不能说我完全理解代码背后的逻辑,但您可能还想看看 编辑仔细检查后,代码还存在其他问题: 您从头开始重新创建temp,因此在每个循环迭代

我正在用Java创建随机数生成器,这是我为更好地学习该语言而编写的程序的一部分(来自更多的C#/C++背景)

ArrayList al=new ArrayList();
Random ran=新的Random();
对于(int i=1;i使用
Collections.sort(temp)

在Java中,数组和列表是两种不同的野兽。仅适用于数组;列表的等效函数为

我不能说我完全理解代码背后的逻辑,但您可能还想看看

编辑仔细检查后,代码还存在其他问题:

  • 您从头开始重新创建
    temp
    ,因此在每个循环迭代中,它将只包含一个元素
  • temp[i]
    在语法上无效;正确的语法是
    temp.get(i)
    。即使使用正确的语法,它也会给您一个“越界”异常,因为
    temp
    只包含一个元素

  • 排序ArrayList时,应使用:

    Collections.sort();
    
    在您的情况下,我建议您使用,它为您提供一个已排序的集合(它在每次添加或删除后对自身进行排序。此外,它还防止您添加重复的元素)

    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);
    
    TreeSet randomSet=new TreeSet();
    Random ran=新的Random();
    而(randomSet.size()<3){
    randomSet.add(Math.abs(ran.nextInt())%11+1);//+1调整范围[1..11]
    }
    for(int i:randomSet)
    系统输出打印LN(i);
    
    abs()保证只有正数,并且可以使用%运算符设置最大值

    有关从oracle文档中获取的添加的更多信息:

    如果此集合已经包含元素,则调用将保持集合不变并返回false

    它将做到:

    Collections.sort();
    

    您可以使用
    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) ;
      }
    });
    
    ArrayList al=new ArrayList();
    Collections.sort(al,新的Comparator()
    {
    公共整数比较(整数a、整数b){
    返回a.compareTo(b);
    }
    });
    

    现在,
    al
    有了一个排序列表。

    非常感谢-这是您在google上首先用Java搜索数组排序时得到的结果。:)我还将查看collections.shuffle。关于更改为collections.sort(temp)后的输出行,我仍然可以用temp[I]打印该行吗index?@KOL:正确的语法是
    temp.get(i)
    。查看更新后的答案。感谢您提供了额外的逻辑。我希望在1-11范围内生成2个随机数。因此,从您的评论来看,%后面应该有11,for循环非常有用-谢谢-您能否解释一下%11+1是如何工作的-即为什么需要添加+1,如果我的范围是20,我就不需要了+1右?它与C++中的模运算符相同吗?谢谢,这在C++中是一样的。没有+1,范围从0到10。+1只是一个调整范围,从1到11。
    ArrayList<Integer> al =new ArrayList<Integer>();
    
    Collections.sort(al , new Comparator<Integer>()
    {
      public int compare(Integer a, Integer b) {
        return a.compareTo(b) ;
      }
    });