繁体   English   中英

生成随机数并在Java中对其进行排序

[英]Generating random numbers and sorting them out in Java

我的目标是生成0到100之间的随机数,并将它们添加到链表列表对象中,然后对元素进行排序。

到目前为止这是我的代码。 当我想显示已排序的元素时,我遇到了问题。

我得到的错误:线程“main”中的异常java.util.IllegalFormatConversionException:d!= java.util.Arrays $ ArrayList

有人可以解决这个问题吗? 谢谢

package com.LinkedLists;

import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.LinkedList;
import java.util.Random;
import java.util.Set;

public class InsertRandomElements {

    public static void main(String[] args) {

        // Create a random number object from 0 to 100.
        // Create an array object.
        Random r = new Random();
        int[] random = new int[100];

        // Insert random numbers into the array
        for (int i = 0; i < random.length; i++) {
            random[i] = r.nextInt(100) + 1;
        }

        // Printing out the unsorted array
        for (int i = 0; i < random.length; i++) {
            System.out.println(random[i]);
        }

        List<int[]> randomList = Arrays.asList(random);

        // Call the method in here.
        sortElements(randomList);

    }

    // Sort the elements
    private static void sortElements(Collection<int[]> values) {

        Set<int[]> set = new HashSet<int[]>(values);

        for (int[] is : set) {
            System.out.printf("Sorted Elements: %d ", values);
        }

        System.out.println();
    }

    // Calculate Sum of the elements

    // Calculate floating point average of the elements.

}

您需要List<Integer>而不是List<int[]> 从原始数组转换为整数列表不是一次调用操作,您必须迭代原始数组并逐个添加到列表中。 我不建议这样做,特别是因为没有理由首先使用该阵列。 作为参考,你需要这个:

final List<Integer> randomList = new LinkedList<>();
for (int i : random) randomList.add(i);

当你改变它,这将工作:

System.out.printf("Sorted Elements: %s ", values);

但是,使用Arrays.sort(myArray)对数组本身进行Arrays.sort(myArray)然后使用打印会更简单

System.out.println(Arrays.toString(myArray));

另一方面,如果您从一开始就使用List<Integer> ,它将如下所示:

final Random rnd = new Random();
final List<Integer> values = new ArrayList<>();
for (int i = 0; i < 100; i++) values.add(rnd.nextInt());
Collections.sort(values);
System.out.println("Sorted Elements: " + values);

它变得困惑,因为** int[]是一个对象但int不是这样它假定int[]作为List一个元素,因此返回List<int[]>而不是List<Integer>List<int>(this is not possible and is causing the issue)

请将随机更改为Integer[] ,如下所示,它应该可以正常工作。

    Integer [] random = new Integer[100];
    List<Integer> randomList = Arrays.asList(random);

要对列表进行排序:使用Collections#sort

    Collections.sort(randomList);

请记住 ,方法签名是: public static <T> List<T> asList(T... a) ,它根据传递的参数类型确定要返回的List的类型。

请注意:即使你将random定义为new Integer[100]; ,你仍然可以保留这种语句: random[i] = r.nextInt(100) + 1; 这样可以正常工作,因为在这些情况下int被提升为Integer

在这种情况下,我认为将random数组直接传递给sortElements(int[] values)方法然后将数组转换为列表会更容易。

换句话说,你会调用sortElements(random); 然后List<Integer> randomList = new LinkedList(Arrays.asList(random)); 获取链表。

使用您的代码尝试:

for (int[] is : set) {
   System.out.printf("Sorted Elements: %d ", is[0]);
}

但你还需要对它进行排序,如前一篇文章所述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM