我想我一定是要失去它。 我正在尝试在2D数组中找到元素的坐标。
我已经将代码简化为尽可能简单但仍然无法正确完成。 我是Java的新手
请告诉我为什么答案总是42.0,无论我把'*'放在哪里
public static void main(String[] args) {
locateStar(board);
}
static char[][] board = {
{ '.', '.', '.', '.' },
{ '.', '.', '.', '.' },
{ '.', '.', '.', '*' },
{ '.', '.', '.', '.' }
};
public static void locateStar(char[][] board) {
double star = 0;
for (int i = 0; i < board.length; i++) {
for (int j = 0; j < board[0].length; j++) {
if (board[i][j] == '*') {
star = board[i][j];
}
}
}
System.out.println(star);
}
答案 0 :(得分:4)
仔细看看这一行:
star = board[i][j];
您正在为char
分配double
。值42
是星号*
的ASCII值。如果你想打印坐标(这是两个值,而不只是一个),那么试试这个:
public static void locateStar(char[][] board) {
int x, y;
for (int i=0; i < board.length; i++) {
for (int j=0; j < board[0].length; j++) {
if (board[i][j] == '*') {
x = i;
y = j;
}
}
}
System.out.println("Found a star at (" + x + ", " + y + ")");
}
答案 1 :(得分:2)
啊,它有点好笑:)你找到了星星,你将星星指定为双倍值:
star = board[i][j];
也就是说,您将'*'
分配给double,获取*字符的ASCII值,实际上是-42。
这里有一些代码显示它已找到:
for (int i = 0; i < board.length; i++) {
for (int j = 0; j < board[0].length; j++) {
if (board[i][j] == '*') {
System.out.println("Found at " + i + " " + j);
break;
}
}
}
答案 2 :(得分:2)
ASCII值42对应于*符号。你的代码实际上是检索值*然后隐式地将它强制转换为一个数字,它总是为42.你不会看到任何位置的差异,因为你只是在寻找&#39; *&# 39;价值,而不是它的位置或其他任何东西。