我有一个类应该将Sierpinski三角形绘制到给定的程度,由增加/减少按钮确定以改变该程度。 但是,按下按钮后,学位(变量 x )始终会恢复为 0 。
我的问题在哪里?
import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.scene.shape.Line;
import javafx.stage.Stage;
public class Recursion4 extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
BorderPane pane = new BorderPane();
Button plus = new Button("+");
Button minus = new Button("-");
HBox h = new HBox(5);
Pane p = new Pane();
h.getChildren().addAll(plus, minus);
h.setSpacing(10);
pane.setBottom(h);
pane.setCenter(p);
h.setAlignment(Pos.CENTER);
Scene scene = new Scene(pane, 900, 900);
primaryStage.setTitle("Triangles");
primaryStage.setScene(scene);
primaryStage.show();
int x = 0;
draw(450, 300, 300, 600, 600, 600, x, p);
plus.setOnAction(e -> {
plus(x, p);
});
minus.setOnAction(e -> {
minus(x, p);
});
}
public static void main(String[] args) {
launch(args);
int x = 0;
}
public static void plus(int x, Pane p) {
p.getChildren().clear();
++x;
draw(450, 300, 300, 600, 600, 600, x, p);
}
public static void minus(int x, Pane p) {
p.getChildren().clear();
if (x == 0) {
draw(450, 300, 300, 600, 600, 600, x, p);
} else {
x--;
draw(450, 300, 300, 600, 600, 600, x, p);
}
}
public static void draw(int x1, int y1, int x2, int y2, int x3, int y3, Pane p) {
Line l1 = new Line(x1, y1, x2, y2);
Line l2 = new Line(x2, y2, x3, y3);
Line l3 = new Line(x3, y3, x1, y1);
p.getChildren().add(l1);
p.getChildren().add(l2);
p.getChildren().add(l3);
}
public static void draw(int x1, int y1, int x2, int y2, int x3, int y3, int z, Pane p) {
if (z == 0) {
draw(x1, y1, x2, y2, x3, y3, p);
} else {
draw(x1, y1, x2, y2, x3, y3, p);
int xa, ya, xb, yb, xc, yc;
xa = (x1 + x2) / 2;
ya = (y1 + y2) / 2;
xb = (x1 + x3) / 2;
yb = (y1 + y3) / 2;
xc = (x2 + x3) / 2;
yc = (y2 + y3) / 2;
draw(x1, y1, xa, ya, xb, yb, z - 1,p);
draw(xa, ya, x2, y2, xc, yc, z - 1,p);
draw(xb, yb, xc, yc, x3, y3, z - 1,p);
}
}
}
答案 0 :(得分:0)
main , plus 和 minus 中的每一个都有一个局部变量 x (请注意本地声明) 。您没有在任何地方引用对象属性 x ,这似乎是您想要更改的内容。使用 this.x 而不是声明本地的。