gpt4 book ai didi

java - 计算二维数组JAVA中单元格周围的地雷数量

转载 作者:行者123 更新时间:2023-11-30 05:20:36 24 4
gpt4 key购买 nike

嗨,基本上我正在尝试制作扫雷的初学者版本,但我有点卡住了。我能够到达这样的阶段:我有一个二维字符数组,而“*”表示我的,而 ^ 则不然。我陷入困境的部分是用周围的地雷数量更改“^”,我的代码所做的是返回一个二维数组,但我得到的不是数字,而是奇怪的问号。

这是我的功能。

static char[][] calculatemines(char[][] h) {
int height = h.length;
int width = h[0].length;

char[][] newh = new char[height][width];
for (int i = 0; i < newh.length; i++) {
for (int j = 0; j < newh[0].length; j++) {
if(h[i][j]=='*') {
newh[i][j]='*';
} else
newh[i][j]= (char) numberofmines(h,height,width);
}
}

return newh;
}

这是第二个函数

private static int numberofmines(char[][] f, int height, int width) {

int numberofmines = 0;

for (int i = 0; i < height; i++) {
for (int j = 0; j < width; j++) {

int iStart = Math.max(0, i - 1);
int iEnd = Math.min(height, i + 1);

int jStart = Math.max(0, j - 1);
int jEnd = Math.min(width, j + 1);

for (int squareI = iStart; squareI < iEnd; squareI++) {
for (int squareJ = jStart; squareJ < jEnd; squareJ++) {
if (f[squareI][squareJ] == '*') {
numberofmines++;
}
}
}
}
}

return numberofmines;
}

感谢您的帮助:)

最佳答案

这是因为您将 numberofmines() 中的 int 转换为 char,这意味着您将得到 ASCII value 。您可以添加 48('0' 的 ASCII 值为 48)来获取原始数字

newh[i][j] = (char)(numberofmines(h,height,width) + 48);

编辑:

您不需要迭代 numberofmines() 中的所有数组,只需迭代周围的单元格

else {
newh[i][j] = (char)(numberofmines(h, h.length, h[0].length, i, j) + 48);
}

private static int numberofmines(char[][] f, int height, int width, int i, int j) {
int iStart = Math.max(0, i - 1);
int iEnd = Math.min(height, i + 2);

int jStart = Math.max(0, j - 1);
int jEnd = Math.min(width, j + 2);

// ...
}

关于java - 计算二维数组JAVA中单元格周围的地雷数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59642034/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com