0

プログラムの修正方法がわかりません。Sorting.java プログラムを public static void selectionSort (int[] intList) に変更しようとしましたが、修正されていないようです。誰か助けてくれませんか?

ファイル Sorting.java には、Sorting クラスが含まれています。このクラスは、任意の Comparable オブジェクトの配列を昇順で並べ替えるための選択並べ替えアルゴリズムと挿入並べ替えアルゴリズムの両方を実装します。この演習では、Sorting クラスを使用して、さまざまな種類のオブジェクトを並べ替えます。

  1. Numbers.java ファイルは、整数の配列を読み取り、選択ソート アルゴリズムを呼び出してそれらをソートし、ソートされた配列を出力します。Sorting.java と Numbers.java をディレクトリに保存します。Numbers.java は現在の形式ではコンパイルされません。その理由を理解できるかどうかを調べるために、それを調べてください。

  2. Numbers.java をコンパイルして、エラー メッセージの内容を確認してください。**問題には、プリミティブ データとオブジェクトの違いが関係しています。プログラムを変更して、正しく動作するようにします (注: 多くの変更を行う必要はありません。Java 1.5 のオートボクシング機能により、int から Integer へのほとんどの変換が処理されます)。

コードは次のとおりです。

// Demonstrates the selection sort and insertion sort algorithms.
public class Sorting {
    // Sorts the specified array of objects using the selection
    // sort algorithm.

    public static void selectionSort (Comparable[] list) {
        int min;
        Comparable temp;
        for (int index = 0; index < list.length-1; index++) {
            min = index;
            for (int scan = index+1; scan < list.length; scan++)
                if (list[scan].compareTo(list[min]) < 0)
                    min = scan;

        // Swap the values
            temp = list[min];

            list[min] = list[index];
            list[index] = temp;
        }
    }

    // Sorts the specified array of objects using the insertion
    // sort algorithm.
    public static void insertionSort (Comparable[] list) {
        for (int index = 1; index < list.length; index++) {
            Comparable key = list[index];
            int position = index;

            // Shift larger values to the right
            while (position > 0 && key.compareTo(list[position-1]) < 0) {
                list[position] = list[position-1];
                position--;
            }

            list[position] = key;
        }
    }
}

// Numbers.java    
// Demonstrates selectionSort on an array of integers.    
import java.util.Scanner;

public class Numbers {

    // Reads in an array of integers, sorts them,
    // then prints them in sorted order.
    public static void main (String[] args) {
        int[] intList;
        int size;
        Scanner scan = new Scanner(System.in);
        System.out.print ("\nHow many integers do you want to sort? ");

        size = scan.nextInt();
        intList = new int[size];

        System.out.println ("\nEnter the numbers...");
        for (int i = 0; i < size; i++)
            intList[i] = scan.nextInt();

        Sorting.selectionSort(intList);

        System.out.println ("\nYour numbers in sorted order...");
        for (int i = 0; i < size; i++)
            System.out.print(intList[i] + " ");

        System.out.println ();
    }
}
4

1 に答える 1

1

selectionSort(Comparable[] list)Comparable 配列を期待するSorting Classメソッドで。

しかし、送信int[]できる代わりに int[] を送信していますInteger[]

メソッドでmainは、以下のように配列を宣言すると正常に動作します。

整数[] intList;

メイン メソッドを以下のコードに置き換えます。

public static void main(String[] args)

    {

        Integer[] intList;

        int size;

        Scanner scan = new Scanner(System.in);

        System.out.print("\nHow many integers do you want to sort? ");

        size = scan.nextInt();

        intList = new Integer[size];

        System.out.println("\nEnter the numbers...");

        for (int i = 0; i < size; i++)

            intList[i] = scan.nextInt();

        Sorting.selectionSort(intList);

        System.out.println("\nYour numbers in sorted order...");

        for (int i = 0; i < size; i++)

            System.out.print(intList[i] + " ");

        System.out.println();

    }

ご参考までに

intに自動ボックス化されていますがInteger、に自動ボックス化されint[]ていませんInteger[]

配列はボックス化されておらず、型自体だけです。

これを参照してください: How to convert int[] into List<Integer> in Java?

インジャバ

于 2012-11-30T05:40:47.170 に答える