我和一些问过这个问题的人有同样的问题。
我想为一些小型扫雷游戏编写一些基本内容。 现在我遇到了我的代码
的问题public class Minesweeper1 {
public static int[][] makeRandomBoard(int s, int z, int n){
int feld[][] = new int [s][z];
for(int i = 0; i < s; i++){
for(int j = 0; j < z; j++){
feld[i][j] = 0;
}
}
for(int i = 0; i < n; i++){
selectRandomPosition(s, z);
feld[randomHeight][randomWidth] = 1;
}
}
所以它启动了selectRandomPosition代码:
public static int[] selectRandomPosition(int maxWidth, int maxHeight) {
int randomHeight = StdRandom.uniform(0, maxHeight);
int randomWidth = StdRandom.uniform(0, maxWidth);
return new int[]{randomHeight, randomWidth};
}
这里我不允许更改任何内容,但会返回一个新数组。现在我的问题是如何在makeRandomBoard
中使用新数组?因为我不知道数组的任何名称。当我使用feld[randomHeight][randomWidth] = 1;
时,它表示它不知道这些变量。
他确实得到了答案: 调用方法,并将其返回值赋给变量。现在你有了一个数组名称:
// Make a call
int[] randomArray = selectRandomPosition(maxW, maxH);
// Access the width
int randomW = randomArray[0];
// Access the height
int randomH = randomArray[1];
但我现在要写什么? 我尝试过:
feld[randomW][randomH] = 1;
但似乎它不起作用。我还需要一份退货声明。 任何人都可以帮助我吗?
答案 0 :(得分:0)
我相信这是您正在寻找的解决方案:
public class Minesweeper1 {
// Note:
// s == Height
// z == Width
public static int[][] makeRandomBoard(int s, int z, int n) {
// Note: Misspelling of "field"?
int feld[][] = new int [s][z];
// Initialize the game board with no mines (value of 0)
for(int i = 0; i < s; i++) {
for(int j = 0; j < z; j++) {
feld[i][j] = 0;
}
}
// Iterate through n times to place "mines" (value of 1)
for(int i = 0; i < n; i++){
// selectRandomPosition returns an array of length 2
// the first index (0) = randomHeight
// the second index (1) = randomWidth
// Notice that z and s is flipped
// because the first parameter is for width, which is z
// and the second parameter is for height, which is s
int[] position = selectRandomPosition(z, s);
int positionX = position[1];
int positionY = position[0];
// The order of positionY/positionX is key!
// If it's in the wrong order you will get an
// IndexOutOfBoundsException!
feld[positionY][positionX] = 1;
}
// Return the newly created array
return feld;
}
public static int[] selectRandomPosition(int maxWidth, int maxHeight) {
int randomHeight = StdRandom.uniform(0, maxHeight);
int randomWidth = StdRandom.uniform(0, maxWidth);
// Notice that this is returning a fixed array of two elements
// the first being the Y component, and the second being the X
// component.
return new int[]{randomHeight, randomWidth};
}
}
您正在调用selectRandomPosition
错误。请记住,s
是高度,z
是宽度。因此,您将第一个参数的高度selectRandomPosition
和第二个参数的宽度传递给public static int[] selectRandomPosition(int maxWidth, int maxHeight)
。查看方法声明:
maxWidth
这意味着您将高度传递到maxHeight
,将宽度传递到s
。我的解决方案为您翻转。这可能会造成混淆,因为z
和feld[randomW][randomH] = 1;
并没有真正给出你的含义(高度和宽度) - 考虑重命名这些变量来帮助你。
你的问题是:
feld[randomH][randomW] = 1;
这是错的,它应该是:
feld[0][0] == 1
feld[0][1] == 1
feld[0][2] == 1
feld[1][0] == 1
feld[1][1] == 2
feld[1][2] == 4
feld[2][0] == 1
feld[2][1] == 3
feld[2][2] == 9
此图像显示了二维数组的外观直观表示:
所以访问权限是:
s
除了让z
和const String HtmlHtml = "<html><head>"
"<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" /></head>";`
const String HtmlHtmlClose = "</html>";
const String HtmlTitle = "<h1>Arduino-er: ESP8266 AP WebServer exercise</h1><br/>\n";
const String HtmlLedStateLow = "<big>LED is now <b>ON</b></big><br/>\n";
const String HtmlLedStateHigh = "<big>LED is now <b>OFF</b></big><br/>\n";
const String HtmlButtons =
"<a href=\"LEDOn\"><button style=\"display: block; width: 100%;\">ON</button></a><br/>"
"<a href=\"LEDOff\"><button style=\"display: block; width: 100%;\">OFF</button></a><br/>";
等奇怪的变量名称在记住什么意味着什么时根本没有帮助你,你最终会返回的主变量拼写错误。你的意思是“场”吗?
变量命名很重要,可以帮助您和其他读者轻松理解您的代码。此外,您认为需要它们的地方的评论也有帮助!