调用方法的问题(扫雷)
Problems with calling a Method (Minesweeper)
我现在面临一个问题,我认为我的 main 一遍又一遍地执行一个方法,而不是一次。如果我根据一个例子来解释它会更好。我已经能够编写扫雷游戏。但我把它全部写在一个class MAIN 中。这次我尝试再做一次,但使用方法和 classes,为了练习和更好的概述。
如您所见,在我的 Class 计算中,我试图创建一个标签数组。在我的 Main 中,我试图在 GridPane 中添加数组中的所有标签。由于这是一款扫雷游戏,我还必须添加随机炸弹,在我的示例中为 "X"。我做了这个小测试是否有效 lbs[10].setText("x"),只是为了看看它是否有效。它没有。调用此方法后,它将所有标签的文本设置为 X!我还想在此 class 中设置一个 onMouseClicked 事件。我将不胜感激任何帮助,并感谢您花时间阅读本文。我用 Hashtag -> ######
包围了代码
//Main
package application;
import...
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
try {
GridPane grid = new GridPane();
Scene scene = new Scene(grid, (20 * 20), (20 * 20));
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
for(int i = 0; i < 20; i++) {
ColumnConstraints column = new ColumnConstraints(20);
grid.getColumnConstraints().add(column);
}
for(int i = 0; i < 20; i++) {
RowConstraints row = new RowConstraints(20);
grid.getRowConstraints().add(row);
}
//#########################################################
Calculations c = new Calculations();
int count = 0;
for (int x = 0; x < c.test().length/20; x++)
{
for (int y = 0; y < c.test().length/20; y++)
{
grid.add(c.test()[count], x, y);
count++;
}
}
//#########################################################
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}
这是我的 class "Calculations"
package application;
import...
public class Calculations {
public Label[] test() {
Label label = new Label();
Label lbs[] = new Label[20*20];
int a = 0;
for (int i = 0 ; i < 400; i++) {
lbs[i] = label;
}
lbs[10].setText("x"); //##### <- doesnt work the way it should be
return lbs;
}
}
这是因为数组lbs
中的所有元素都指向同一个标签label
。
因此,当您将任何一个的文本设置为 "x"
时,它会更改 label
的文本,实际上是每个标签。
在循环中更改此行:
lbs[i] = label;
至:
lbs[i] = new Label();
我现在面临一个问题,我认为我的 main 一遍又一遍地执行一个方法,而不是一次。如果我根据一个例子来解释它会更好。我已经能够编写扫雷游戏。但我把它全部写在一个class MAIN 中。这次我尝试再做一次,但使用方法和 classes,为了练习和更好的概述。 如您所见,在我的 Class 计算中,我试图创建一个标签数组。在我的 Main 中,我试图在 GridPane 中添加数组中的所有标签。由于这是一款扫雷游戏,我还必须添加随机炸弹,在我的示例中为 "X"。我做了这个小测试是否有效 lbs[10].setText("x"),只是为了看看它是否有效。它没有。调用此方法后,它将所有标签的文本设置为 X!我还想在此 class 中设置一个 onMouseClicked 事件。我将不胜感激任何帮助,并感谢您花时间阅读本文。我用 Hashtag -> ######
包围了代码//Main
package application;
import...
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
try {
GridPane grid = new GridPane();
Scene scene = new Scene(grid, (20 * 20), (20 * 20));
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setScene(scene);
primaryStage.show();
for(int i = 0; i < 20; i++) {
ColumnConstraints column = new ColumnConstraints(20);
grid.getColumnConstraints().add(column);
}
for(int i = 0; i < 20; i++) {
RowConstraints row = new RowConstraints(20);
grid.getRowConstraints().add(row);
}
//#########################################################
Calculations c = new Calculations();
int count = 0;
for (int x = 0; x < c.test().length/20; x++)
{
for (int y = 0; y < c.test().length/20; y++)
{
grid.add(c.test()[count], x, y);
count++;
}
}
//#########################################################
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}
这是我的 class "Calculations"
package application;
import...
public class Calculations {
public Label[] test() {
Label label = new Label();
Label lbs[] = new Label[20*20];
int a = 0;
for (int i = 0 ; i < 400; i++) {
lbs[i] = label;
}
lbs[10].setText("x"); //##### <- doesnt work the way it should be
return lbs;
}
}
这是因为数组lbs
中的所有元素都指向同一个标签label
。
因此,当您将任何一个的文本设置为 "x"
时,它会更改 label
的文本,实际上是每个标签。
在循环中更改此行:
lbs[i] = label;
至:
lbs[i] = new Label();