Есть ли более простой способ определить объекты внутри объектов? - PullRequest
0 голосов
/ 21 октября 2019

поэтому у меня есть класс

public class Box {
    int index;
    static int amount;
    Box thisbox;
    Cargo thiscargo;
    Box(){
        index = amount;
        amount++;
    }
}

А в другом классе я определю поля:

public class dostuff {
    public static void main(String[] args) throws NoSuchMethodException {
        Box box = new Box();
        box.thisbox = new Box();
        box.thisbox.thisbox = new Box();
        box.thisbox.thisbox.thisbox = new Box();
        box.thisbox.thisbox.thisbox.thisbox = new Box();
    }

}

, чтобы вы могли сказать, box.thisbox.thisbox. thisbox.thisbox становится довольно раздражающим. Мне было интересно, смогу ли я сделать цикл для более удобного доступа к box.thisbox.thisbox.thisbox без повторения .thisbox три раза. может быть ситуация, когда мне нужно определить 30 блоков внутри коробки, и я не хочу копировать и вставлять вещи «thisbox» так много раз. Очень хотелось бы помочь. Спасибо! Изменить: я не могу использовать списки массивов. не спрашивай ...

Ответы [ 2 ]

1 голос
/ 21 октября 2019

Пока вы знаете точку завершения, то есть до тех пор, пока вы не захотите продолжать создавать объект-бокс, вы можете сделать это несколькими способами. Это один из способов сделать это.

Использование рекурсии

public static void main(String[] args) {
    Box box = new Box();
    createBox(box);
}

public static void createBox(Box box) {
        while(box.amount != 10){
        box.thisbox = new Box();
        createBox(box.thisbox);
    }
}

0 голосов
/ 21 октября 2019

Вы можете написать рекурсивный метод, который углубляется на определенный уровень.

Примерно так

public Box getNthBox(Box box, int depth) {
    If (depth == 0) {
        return box;
    } 

    return getNthBox(box.getBox(), depth - 1);
}

Вам нужен метод getBox (), который возвращает поле Box.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...