Java 实现选择排序:输入数组随返回数组一起改变
我有一个处理笛卡尔点的程序。在程序中的某个位置,我将x和y值加载到一个点数组中。没什么大不了的。但是,我想按x值对这个数组进行排序,并将其设置为一个新变量,同时保持原始数组的原样。 原始数组为“点”,新数组定义为:Java 实现选择排序:输入数组随返回数组一起改变,java,arrays,selection-sort,Java,Arrays,Selection Sort,我有一个处理笛卡尔点的程序。在程序中的某个位置,我将x和y值加载到一个点数组中。没什么大不了的。但是,我想按x值对这个数组进行排序,并将其设置为一个新变量,同时保持原始数组的原样。 原始数组为“点”,新数组定义为: points1 = sortBy(points, "x"); sortBy方法在前面定义为: private static Point[] sortBy( Point[] pointsXY, String xOrY) { int min; Point[] inputPoin
points1 = sortBy(points, "x");
sortBy方法在前面定义为:
private static Point[] sortBy( Point[] pointsXY, String xOrY) {
int min;
Point[] inputPoints = pointsXY;
if( xOrY == "x"){
for( int i = 0; i < (inputPoints.length - 1); i++ ) {
min = i;
for( int j = i+1; j < inputPoints.length; j++ ) {
if( inputPoints[j].getX() < inputPoints[min].getX()) min = j;
}
// Swap points[i] and points[min]
Point temp = inputPoints[i];
inputPoints[i] = inputPoints[min];
inputPoints[min] = temp;
}
private static Point[]sortBy(Point[]pointsXY,String xOrY){
int-min;
点[]输入点=点xy;
如果(xOrY==“x”){
对于(int i=0;i<(inputPoints.length-1);i++){
min=i;
对于(int j=i+1;j
后面有一个“else-if”块,它改为“y”。然后它会:返回inputPoints;
然而,当我打印出这些数组时,得到的是完全相同的东西——两个按x值排序的数组。我通过输出未排序的数组来测试输出,它工作正常。
我也尝试过使用这个方法,但它不是静态的,它给出了相同的输出。
Point[]inputPoints=pointsXY;
不复制数组,它只是为同一数组创建一个新名称(inputPoints
)。要创建数组的副本,应该使用Point[]inputPoints=pointsXY.clone();
().Point[]inputPoints=Arrays.copyOf(pointsXY,pointsXY.lenght);
应该做你想做的事,当然是这么简单!谢谢,这很有魅力!