java - 数组中两点之间的距离
问题描述
我试图找出数组中两点之间的距离(或“步数”)。从该数组中的任何位置,到任何其他点。
例如:如果有一个 5x5 矩阵的 PacMan 地图,并且 Pacman 站在字段 row=0 和 column=0 上,他需要采取 8 步才能到达字段 r=5, c=5。但是,如果吃豆人站在 4x5 上,他需要多少步才能到达 3x3 场地?我拼命想弄清楚这一点。
这是我到目前为止所得到的:
1 public static void path() {
2 int[][] ratings = new int[5][5];
3 int value = 0;
4 for(int i = 0; i<ratings.length; i++) {
5 value = i;
6 for(int j = 0; j<ratings[i].length; j++) {
7 ratings[i][j] = value;
8 value++;
9 System.out.print("-"+ratings[i][j]);
10 }
11 System.out.println();
12 }
13 }
输出:
-0-1-2-3-4
-1-2-3-4-5
-2-3-4-5-6
-3-4-5-6-7
-4-5-6-7-8
如您所见,我正在尝试为每个数组位置赋予一定的路径等级。起点是 0 的点。例如,我如何设法获得此输出:
-3-2-3-4-5
-2-1-2-3-4
-1-0-1-2-3
-2-1-2-3-4
-3-2-3-4-5
我希望你们能帮助我解决这个问题。:)
解决方案
将当前的 X 和 Y 坐标作为参数。从值中减去这些并取绝对值。这给出了你想要的行为。它实际上总是与您的第一个输出相同的距离表,但您给它一个偏移起始位置。
例如:
Current position (x1,y1) = 4,4.
Wanted position (x2,Y2) = 3,2
Distance = absolute(x2-x1) + absolute(y2-y1) = abs(3-4) + abs(2-4) = 1 + 2 = 3
我修改了您的代码以提供正确的偏移量表:
public static void path(int currentX, int currentY) {
int[][] ratings = new int[5][5];
int value = 0;
for (int i = 0; i<ratings.length; i++) {
value = Math.abs(i-currentX);
for (int j = 0; j<ratings[i].length; j++) {
ratings[i][j] = value + Math.abs(j-currentY);
System.out.print("-"+ratings[i][j]);
}
System.out.println();
}
}
推荐阅读
- python - Windows 10:Python.py 程序可以自行重启吗?
- git - vscode上的git命令
- python - 在 ndaray 中更改特定数组中的元素
- c++ - 这个结构初始化是如何工作的?
- authlib - 如何使用 HTTPX / Starlette 关闭 Authlib 客户端的 SSL 验证?
- swift - 在表格视图中显示三个可重用单元格 - Swift 5
- http - 从csv读取数据时如何在Jmeter的http post body中跳过空白值?
- angular - 如何在 Angular 中单击卡片外部时关闭卡片?
- python - 知道我对来自 kivy 的 python 导入错误做错了什么吗?
- flutter - 在 Flutter 中无法将图像保存到设备中?