4

私の目標は、0 から 100 までの乱数を生成し、それらをリンクリスト オブジェクトに追加してから、要素を並べ替えることです。

これはこれまでの私のコードです。並べ替えられた要素を表示したいときに問題が発生しています。

私が得るエラー: Exception in thread "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.

}

4

4 に答える 4

2

List<Integer>ではなくが必要ですList<int[]>。プリミティブ配列から整数のリストへの変換は、ワンコール操作ではありません。実際には、プリミティブ配列を反復処理して、リストに 1 つずつ追加する必要があります。そもそも配列を使用する理由がないため、これはお勧めしません。参考までに、これが必要です:

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);
于 2012-11-08T14:04:23.817 に答える
2

**int[]はオブジェクトですが、そうではないため混乱しているため、 の 1 つの要素としてint想定されているため、 orではありません。int[]ListList<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 as を定義した場合でもnew Integer[100];、この種類のステートメントはそのままにしておくことができます: random[i] = r.nextInt(100) + 1;。これらの場合にint昇格されると、これは正常に機能します。Integer

于 2012-11-08T14:23:35.357 に答える
0

この場合、配列をメソッドにrandom直接渡してから、配列をリスト変換する方が簡単だと思います。sortElements(int[] values)

つまり、呼び出しsortElements(random);List<Integer> randomList = new LinkedList(Arrays.asList(random));からリンクリストを取得します。

于 2012-11-08T14:10:37.543 に答える
-1

あなたのコードを試してみてください:

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

ただし、以前の投稿で述べたように、まだ並べ替える必要があります

于 2012-11-08T14:19:35.383 に答える