多态排序转换

时间:2012-11-30 05:17:53

标签: java arrays sorting polymorphism

我无法弄清楚如何纠正程序。我已经尝试将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的大多数转换。

  3. 这是代码: -

    // 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 ();
        }
    }
    

1 个答案:

答案 0 :(得分:1)

您的排序类selectionSort(Comparable[] list)方法中的

期待可比数组。

但您发送的是[[],而不是int[],您可以发送Integer[]

main方法声明数组如下,它将正常工作。

  

Integer [] intList;

用以下代码替换您的main方法。

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();

    }

FYI

虽然int已自动装箱到Integer,但int[]未自动装箱到Integer[]

数组不是盒装的,只是类型本身。

请参阅:How to convert int[] into List<Integer> in Java?

in-java