java - 排序坐标系
问题描述
我在两个单独的数组列表中输入 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]
解决方案
您可以创建一个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]]
推荐阅读
- monitoring - 增加 Prometheus 存储保留
- laravel - 使用宅基地作为服务器使用laravel进行电子邮件登录
- sql - 有人向我解释这个查询是如何一步一步地工作的?
- cordova - PIE 的 Android 安全漏洞问题
- angular - 找不到多 ./src/styles.css ./src/assets 模块中的错误
- java - 如何在进入 JSP 页面后立即进入 Servlet?
- magento2 - Magento2 file_put_contents
- javascript - 使用 EJS 将 JS 转移到另一个视图
- java - 部署 Gitbub CI 的问题:连接尝试失败
- source-depot - 在 version.json 中找不到风味“GeneralPublic”的 CB.Core 版本