for(int i = 0; i < distance.length; i++) {
for (int j = 0; j < distance.length; j++) {
if (distance[i] == distance[j]) {
if (x[i] > x[j]) {
x = swapInt(x, j, i);
input = swapString(input, j, i);
}
}
}
}
距离表示点与原点的距离
x是点
的x坐标
输入是用户的点的原始输入
如果距离相同,我希望这个循环按x坐标的升序排列点
但是,当我运行它时,它按降序排列
我该怎么做才能解决这个问题?
public static int[] swapInt (int[] a, int i, int j) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
return a;
}
答案 0 :(得分:2)
更改
if (x[i] > x[j]) {
到
if (x[i] < x[j]) {
这将改变排序顺序:如果第i个大于第j个,则在原始中交换两个值,现在在相反的情况下交换它们:j'th大于第i个
答案 1 :(得分:-1)
我更喜欢以下方式,因为它更干净,更易读。
class Distance implements Comparable{
int x;
int y;
@Override
public int compareTo(Object o) {
Distance other=(Distance)o;
if(this.distanceFromOrigin() > other.distanceFromOrigin())
return 1;
else if(this.distanceFromOrigin() < other.distanceFromOrigin())
return -1;
else
return this.x - other.x;
}
int distanceFromOrigin(){
return x*x+y*y;
}
}
现在创建一个数组/距离列表并使用Collections.sort来获得所需的订单。