Java:在方法内调用方法并使用相同的变量

时间:2011-08-23 14:02:20

标签: java methods sweethome3d

我有这个使用开源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;
}

3 个答案:

答案 0 :(得分:1)

方法内的变量不在其他方法的范围内。您必须明确地将它们作为参数传递。目前还不清楚您想对HomeRoom对象做什么,或者您希望它们可以使用哪种方法。

将这些对象作为方法参数传递的另一种方法是将它们存储为类字段;创建private Home homeprivate Room room并在createHome方法中指定这些字段。然后,您可以在同一类中的其他方法中引用homeroom。这种方法实际上取决于您需要这些变量的内容 - 它可能并不代表一个可靠的面向对象设计。

有关您想要完成的更多信息将有助于我们提供更好的建议。

答案 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方法中访问它们。