2015-10-10 36 views
-1

我想制作一个程序,订购3个数字,我将其引入到数组中。Java - 订购3个号码

程序编译正确,但是,与数字 “6,3,2:” 我希望得到:

初始数据: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 
+4

提示:该方法'sortData'您不要修改'outData',所以它将始终为零填充。 – BackSlash

+2

在'sortData'中你要返回哪个数组,什么时候填充数据,什么时候分类? – Pshemo

+0

嘿@Jordi,你见过我的回答吗?你还需要什么别的吗? – janos

回答

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; 
}