我的目标是生成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.
}
答案 0 :(得分:2)
您需要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)
对数组本身进行排序然后使用
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);
答案 1 :(得分:2)
它变得困惑,因为** int[]
是一个对象但int
不是这样,它假定int[]
是List
的一个元素,因此返回{{1不是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);
,它根据传递的参数类型确定要返回的List类型。
请注意:即使您将public static <T> List<T> asList(T... a)
定义为random
,仍然可以保留此类声明:new Integer[100];
。这种方式很好,因为random[i] = r.nextInt(100) + 1;
在这些情况下会提升为int
。
答案 2 :(得分:0)
在这种情况下,我认为将random
数组直接传递给sortElements(int[] values)
方法然后然后将数组转换为列表会更容易。
换句话说,您可以调用sortElements(random);
然后List<Integer> randomList = new LinkedList(Arrays.asList(random));
来获取链接列表。
答案 3 :(得分:-1)
使用您的代码尝试:
for (int[] is : set) {
System.out.printf("Sorted Elements: %d ", is[0]);
}
但您仍需要对其进行排序,如前一篇文章中所述