Java - 订购3个数字

时间:2015-10-10 12:26:41

标签: java arrays

我正在尝试创建一个程序来命令我引入的3个数字,并将其放入数组中。

程序正确编译,但是,数字" 6,3,2和#34;我希望得到:

初步数据:6,3,2。 有序数据:2,3,6。

但是,不是这样,我得到:

初步数据:2,3,6。 有序数据:0,0,0。

为什么我得到这个结果?

也许错误可能在方法sortData()?

谢谢!

import java.io.*;



public class SortNumbers {

    public static void main (String args[]) {

        //Array for initial data
        int [] initialData;
        //Array for ordered data
        int [] orderedData;
        //Length of data, will be asked to the user or put it handly
        int dataLength = 3;

        initialData = inputData(dataLength); //Input data

        if (initialData!=null) { //assess data validity

            orderedData = sortData(initialData); //Sort data
            //Print results
            System.out.println("Initial data:");
            printData(initialData);
            System.out.println("Ordered data:");
            printData(orderedData);

        } else {
            System.out.println("Error entering data.");
        }

    } //end main()

    /**
     * inputData()
     * Inputs an array of numbers.
     * @param int length: number of elements to input.
     * @return int []: an array containing the numbers given by the user,
     * or null in case of an error.
     */
    public static int [] inputData(int numElements) {   

        int [] data = new int [numElements];

        try {
            BufferedReader reader = new BufferedReader(
                //Note: you can write this in the same line
                new InputStreamReader(System.in)
            );

            for (int index=0; index<numElements; index++) {
                System.out.format("Input int number (pos %d of %d): ", index+1, numElements);
                data[index] = Integer.parseInt(reader.readLine());
            }

        } catch (NumberFormatException e) {     
            System.out.println("Input value must be a number!");
            data = null;
        } catch (IOException e) {   
            System.out.println("Error reading data " + e.getMessage());
            data = null;
        }

        return data;
    }

    /**
     * sortData()
     * Sorts an array of numbers
     * @param int [] inData: array of numbers to sort.
     * @return int []: an array of ordered numbers.
     */
    public static int [] sortData(int [] inData) {


        //TODO
        //outData=intData;

//http://www.java-examples.com/java-bubble-sort-example

        int [] outData = new int [inData.length];
         int temp = 0;

         for(int i=0; i < inData.length; i++){
              for(int j=1; j < (inData.length-i); j++){

                    if(inData[j-1] > inData[j]){
                        //swap the elements!
                        temp = inData[j-1];
                        inData[j-1] = inData[j];
                        inData[j] = temp;
                    }

             }
        }




        return outData;
    }

    /**
     * printData()
     * prints an array of numbers.
     * @param int [] data: data array to print.
     */
    public static void printData(int [] data) {

        for (int index=0; index<data.length; index++) {
            System.out.format("%d ", data[index]);
        }
        System.out.println("");
    }

} //end class

1 个答案:

答案 0 :(得分:1)

您的sortData方法对数组就地进行排序: inData输入参数已排序,outData参数在创建后永远不会更新。 当数组使用全0值初始化时,您将返回所有0值。

您可以让方法返回inData

或者,如果您不想修改输入数组,则可以将其克隆到outData,并将修改inData的所有语句更改为使用outData代替

public static int[] sortData(int[] inData) {
    int[] outData = inData.clone();
    int temp = 0;

    for (int i = 0; i < outData.length; i++) {
        for (int j = 1; j < (outData.length - i); j++) {
            if (outData[j - 1] > outData[j]) {
                temp = outData[j - 1];
                outData[j - 1] = outData[j];
                outData[j] = temp;
            }
        }
    }

    return outData;
}

或者您可以让图书馆为您努力工作,并做得更好:

public static int[] sortData(int[] inData) {
    int[] outData = inData.clone();
    Arrays.sort(outData);
    return outData;
}