我正在尝试创建一个程序来命令我引入的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
答案 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;
}