Java: вызов метода внутри метода и использование тех же переменных - PullRequest
0 голосов
/ 23 августа 2011

У меня есть этот код, который использует 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 ]

1 голос
/ 23 августа 2011

Переменные внутри метода не входят в область действия других ваших методов. Вы должны явно передать их в качестве параметров. Неясно, что вы хотите сделать с объектами Home и Room или каким методом вы хотели бы, чтобы они были доступны.

Другой альтернативой передаче этих объектов в качестве параметров метода является их сохранение в виде полей класса; создайте private Home home и private Room room и назначьте эти поля в вашем методе createHome. Затем вы можете ссылаться на home и room внутри других методов того же класса. Однако этот подход действительно зависит от того, для чего вам нужны эти переменные - он не может представлять собой твердый объектно-ориентированный дизайн.

Некоторая дополнительная информация о том, что вы хотите сделать, помогла бы нам предоставить более качественные предложения.

0 голосов
/ 23 августа 2011

Это не похоже на действительный код Java.Вы, вероятно, получаете ошибки компилятора.За каждую ошибку вы получаете Google google и точно выясняете, что означает эта ошибка, и понимаете, почему ваш код неверен.Таким образом вы научитесь писать Java-код.

Вы не показываете, где объявлены переменные, такие как Shape_of_Room, вы просто пытаетесь назначить их.Это должны быть статические переменные на уровне класса, чтобы иметь доступ к ним из статического метода main.

0 голосов
/ 23 августа 2011

Вы инициализировали свою переменную Home внутри метода и Room внутри оператора if.Как только Java выходит из оператора if или метода, переменные мгновенно забываются.Вам нужно объявить их в корне вашего класса вне любого метода:

public class YourClass {

    private Home home;
    private Room room;

    public void createHome() {
        home = super.createHome();
        // ...
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...