首页 > 解决方案 > 排序坐标系

问题描述

我在两个单独的数组列表中输入 ax 和 y 并将它们像(x,y)坐标系一样放在不同的数组列表中。然后尝试使用 Collections.sort(arraylist); 将新的数组列表排序为最小到最大。但是,当我输入两位数(例如(10,11))时,它会识别出小于(6, 7)

for(int x = 0; x <=5; x ++) {  
    System.out.print("Enter X coordinate: ");  
    int playerturnColumn = playerinput.nextInt();  
    System.out.print("Enter Y Coordinate: ");  
    int playerturnRow  = playerinput.nextInt();  
    playerturnCoordinate.add(playerturnColumn + "," + playerturnRow);  
}  
    Collections.sort(playerturnCoordinate);  
    System.out.println(playerturnCoordinate);  

轮到你 输入 X 坐标:10 输入 Y 坐标:11 输入 X 坐标:2 输入 Y 坐标:1 输入 X 坐标:3 输入 Y 坐标:5 输入 X 坐标:2 输入 Y 坐标:8 输入 X 坐标:0 输入 Y 坐标: 1 输入 X 坐标:9 输入 Y 坐标:7 [0,1, 10,11, 2,1, 2,8, 3,5, 9,7]

标签: java

解决方案


您可以创建一个Coordinate实现的类Comparable

import java.util.ArrayList;
import java.util.List;
import java.util.Collections;

class Coordinate implements Comparable<Coordinate> {
  private final int x;
  private final int y;

  public Coordinate(int x, int y) {
    this.x = x;
    this.y = y;
  }

  public int getX() {
    return this.x;
  }

  public int getY() {
    return this.y;
  }

  public String toString() {
    return String.format("[%d, %d]", getX(), getY());
  }

  public double distanceFromOrigin(Coordinate c) {
    return Math.sqrt(Math.pow(c.getX(), 2) + Math.pow(c.getY(), 2));
  }

  public int compareTo(Coordinate other) {
    return Double.compare(distanceFromOrigin(this), distanceFromOrigin(other));
  }
}

class Test {
  public static void main(String[] args) {
    List<Coordinate> playerTurnCoordinates = new ArrayList<>();
    playerTurnCoordinates.add(new Coordinate(10, 11));
    playerTurnCoordinates.add(new Coordinate(2, 1));
    playerTurnCoordinates.add(new Coordinate(3, 5));
    playerTurnCoordinates.add(new Coordinate(2, 8));
    playerTurnCoordinates.add(new Coordinate(0, 1));
    playerTurnCoordinates.add(new Coordinate(9, 7));
    playerTurnCoordinates.add(new Coordinate(6, 7));
    System.out.println("Before sorting: " + playerTurnCoordinates);
    Collections.sort(playerTurnCoordinates);
    System.out.println("After sorting: " + playerTurnCoordinates);
  }
}

输出:

Before sorting: [[10, 11], [2, 1], [3, 5], [2, 8], [0, 1], [9, 7], [6, 7]]
After sorting: [[0, 1], [2, 1], [3, 5], [2, 8], [6, 7], [9, 7], [10, 11]]

推荐阅读