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 数组。

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

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

    }

供参考

虽然int是 autoboxed to Integer,但int[]不是 Autoboxed to Integer[]

数组没有装箱,只有类型本身。

看到这个:How to convert int[] into List<Integer> in Java?

在Java中

于 2012-11-30T05:40:47.170 回答