我有这个使用开源API(Sweethome3D)的代码。我想要做的是检查房间是平行四边形还是方形,然后调用方法并更改墙壁和房间的值。但是,如果我尝试这样做,它会给我错误。你知道我怎么能这样做吗?
@Override
public Home createHome() {
Home home = super.createHome();
if (Shape_of_Room.equals("Parallelogram")) {
float[][] points = { { 0f, 0f }, { 0f, 400f }, { 625f, 400f },
{ 625f, 400f }, { 625f, 0f }, { 0f, 0f } };
Room Parallelogram_Room = new Room(points);
Parallelogram_Room.setAreaVisible(true);
// Add new Room to Home
home.addRoom(Parallelogram_Room);
// Check for Ceiling and Floor Display
if (Floor_Display.equals("true")) {
Parallelogram_Room.setFloorVisible(true);
}
else if (Floor_Display.equals("false")) {
Parallelogram_Room.setFloorVisible(false);
}
if (Ceiling_Display.equals("true")) {
Parallelogram_Room.setCeilingVisible(true);
}
else if (Ceiling_Display.equals("false")) {
Parallelogram_Room.setCeilingVisible(false);
}
Wall Left_Wall = new Wall(0, 0, 0, 400, (float) 7.62);
Wall North_Wall = new Wall(0, 400, 625, 400, (float) 7.62);
Wall Right_Wall = new Wall(625, 400, 625, 0, (float) 7.62);
Wall South_Wall = new Wall(625, 0, 0, 0, (float) 7.62);
Left_Wall.setWallAtEnd(North_Wall);
North_Wall.setWallAtEnd(Right_Wall);
Right_Wall.setWallAtEnd(South_Wall);
South_Wall.setWallAtEnd(Left_Wall);
// Check the color of the Walls
// Values set from site
// http://cloford.com/resources/colours/500col.htm
// and by the calculator
// http://www.shodor.org/stella2java/rgbint.html
int k;
String[] Color = { "Grey", "Red", "Green", "Blue", "Yellow",
"White" };
int[] Color_Number = { 13882323, 16764108, 7456369, 13421823,
11394815, 16777215 };
for (k = 0; k < 6; k++) {
if (Left_Wall_Color.equals(Color[k])) {
Left_Wall.setLeftSideColor(Color_Number[k]);
}
if (North_Wall_Color.equals(Color[k])) {
North_Wall.setLeftSideColor(Color_Number[k]);
}
if (Right_Wall_Color.equals(Color[k])) {
Right_Wall.setLeftSideColor(Color_Number[k]);
}
if (South_Wall_Color.equals(Color[k])) {
South_Wall.setLeftSideColor(Color_Number[k]);
}
}
// Check if the walls are Matt or Shiny
if (Shiny_Matt.equals("Matt")) {
Left_Wall.setLeftSideShininess(0);
North_Wall.setLeftSideShininess(0);
Right_Wall.setLeftSideShininess(0);
South_Wall.setLeftSideShininess(0);
}
else if (Shiny_Matt.equals("Shiny")) {
Left_Wall.setLeftSideShininess(1);
North_Wall.setLeftSideShininess(1);
Right_Wall.setLeftSideShininess(1);
South_Wall.setLeftSideShininess(1);
}
home.addWall(Left_Wall);
home.addWall(North_Wall);
home.addWall(Right_Wall);
home.addWall(South_Wall);
}
// Modify home as you wish here
System.out.println("method called");
return home;
}
答案 0 :(得分:1)
方法内的变量不在其他方法的范围内。您必须明确地将它们作为参数传递。目前还不清楚您想对Home
和Room
对象做什么,或者您希望它们可以使用哪种方法。
将这些对象作为方法参数传递的另一种方法是将它们存储为类字段;创建private Home home
和private Room room
并在createHome
方法中指定这些字段。然后,您可以在同一类中的其他方法中引用home
和room
。这种方法实际上取决于您需要这些变量的内容 - 它可能并不代表一个可靠的面向对象设计。
有关您想要完成的更多信息将有助于我们提供更好的建议。
答案 1 :(得分:0)
您在方法内部初始化了变量Home
,在if语句中初始化了Room
。只要Java退出if语句或方法,就会立即忘记变量。您需要在任何方法之外的类的根中声明它们:
public class YourClass {
private Home home;
private Room room;
public void createHome() {
home = super.createHome();
// ...
}
}
答案 2 :(得分:0)
这看起来不像有效的java代码。您可能正在收到编译器错误。对于每个错误,您都可以使用谷歌搜索并确切了解错误的含义,并了解您的代码无效的原因。这样你就可以学习如何编写Java代码了。
您不会显示声明Shape_of_Room等变量的位置,而只是尝试分配给它们。那些应该是类级别的静态变量,以便能够从静态main方法中访问它们。