在Java中访问深度嵌套的对象框

在Java中访问深度嵌套的对象框,java,class,recursion,Java,Class,Recursion,假设您有一个最多可以包含50个对象的框。奇怪的是,长方体还可能包含另一个长方体,该长方体最多可以包含50个对象,并且该嵌套长方体不会占用外部长方体中的任何空间 嵌套框也可以包含另一个框,以此类推。。。无限的 因此,我编写了一个服务类框,如下所示: class Box { private Box nestedBox; public Box getBox() { return nestedBox; } //other code } 用户可以创建任意数量的框。但他创建的

假设您有一个最多可以包含50个对象的框。奇怪的是,长方体还可能包含另一个长方体,该长方体最多可以包含50个对象,并且该嵌套长方体不会占用外部长方体中的任何空间

嵌套框也可以包含另一个框,以此类推。。。无限的

因此,我编写了一个服务类框,如下所示:

class Box {

  private Box nestedBox;

  public Box getBox() {
    return nestedBox;
  }

  //other code
}
用户可以创建任意数量的框。但他创建的每个盒子都将嵌套在最深的盒子里

例如,如果他希望创建三个框:首先创建第一个框,然后在第一个框内创建第二个框,最后在第二个框内创建第三个也是最后一个框

我该如何编写一个程序来完成这个创建呢?我被告知要使用递归之类的东西

以下是我的尝试:

public static void main(String[] args) {

  int numOfBoxes;
  Scanner sc = new Scanner(System.in);

  numOfBoxes = sc.nextInt();

  if (numOfBoxes == 1) {
    Box b = new Box();
  } else {
    Box b = new Box();
    for (int i = 1; i < numOfBoxes; i++) {
      b.getBox() = new Box();
    }
  }

}

如果有人能帮我,我真的很感激。可以随意更改类框和main方法。我被告知要使用递归,但我无法理解这一点。

正如您所描述的,每个框最多包含一个框,您拥有的实际上是一个链接列表。不需要递归,只需遍历列表,将当前框保留在变量中即可


但可能您试图解决的是一个框可以包含多个框的地方是一棵树,而您需要的是该树的搜索函数。在不了解树中预期的节点分布的情况下,我强烈建议您使用DFS,因为它易于实现,并且可以在大量树类型上执行。

一种方法是保留对最常用框的引用

class Box{
    private Box nestedBox;
    public Box(){

    }
    public Box(Box nestedBox){
        this.nestedBox = nestedBox;
    }
}
public class Main {
    public static void main(String[] args) {
        int numOfBoxes = 4;
        Box nestedBox = null;
        for(int i = 0; i < numOfBoxes; i++){
            nestedBox = new Box(nestedBox);
        }
    }
}

或者,如果您确实需要使用递归解决方案构建长方体,则可以在构造函数中完成。例如:

import java.util.Scanner;

class Box{

    private Box nestedBox;

    public Box(int numOfInnerBoxes){
        if (numOfInnerBoxes > 0) {
            this.nestedBox = new Box(numOfInnerBoxes - 1);
        }
        System.out.println("This box "+ this +" contains box "+ this.nestedBox +".");
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int numOfBoxes = sc.nextInt();
        Box outerBox = new Box(numOfBoxes-1);
        System.out.println("The outermost box is "+ outerBox +".");
    }

}
示例输出:

$ java Box
4
This box Box@55f96302 contains box null.
This box Box@3d4eac69 contains box Box@55f96302.
This box Box@42a57993 contains box Box@3d4eac69.
This box Box@75b84c92 contains box Box@42a57993.
The outermost box is Box@75b84c92.

请注意,每个构造函数都会减少要创建的内部框的数量,直到达到零为止。这是递归解决方案的本质。

您好,我不允许使用任何数组或linkedlist等来存储框。但是谢谢你的链接@Kyoma我不是建议你使用链表,我是说你现在拥有的就是链表。您的作业似乎试图让您构建自己的链表实现。您的长方体本质上是一个节点类,只缺少一个值属性,使其成为一个链接列表。不管怎样,NP,祝你好运!那么,如果一个对象的值为null,那么它的属性也将为null?这段代码首先创建最深的盒子,然后是最外层的盒子。如果先创建outer,我会非常喜欢它:@Downvoter,有什么理由要downvote吗?