假设您有一个最多可包含50个对象的盒子。奇怪的是,该框还可以包含另一个框(最多可以包含50个对象),并且这个“嵌套”框不占用外框中的任何空间。
“嵌套”框也可以包含另一个框,依此类推......无限广告。
因此,我写了一个服务类Box如下:
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();
}
}
}
如果有人可以帮助我,我真的很感激。随意更改类Box和主要方法。我被告知使用递归,但我无法弄明白。
答案 0 :(得分:1)
正如您所描述的那样(每个框最多包含1个框),您拥有的实际上是一个链表。你不需要递归,只需走一下列表,将当前框保存在一个变量中。
但是你可能想要解决的问题(盒子可以包含多个盒子)是一棵树,你需要的是一棵树的搜索功能。在不知道树中预期节点分布的任何内容的情况下,我强烈建议执行DFS(https://en.wikipedia.org/wiki/Depth-first_search),因为这很容易实现,并且在广泛的树类型上具有高性能。
答案 1 :(得分:1)
一种方法是保留对最大框的引用。
<rule name="Change Location Header" enabled="true">
<match serverVariable="RESPONSE_LOCATION" pattern="^http(s)?://([^/]+)/(.*)" />
<conditions logicalGrouping="MatchAny" trackAllCaptures="true">
<add input="{RESPONSE_STATUS}" pattern="^301" />
<add input="{RESPONSE_STATUS}" pattern="^302" />
</conditions>
<action type="Rewrite" value="http{R:1}://{R:2}/{R:3}" />
</rule>
答案 2 :(得分:0)
或者,如果您确实需要使用递归解决方案构建框,则可以在构造函数中执行此操作。例如:
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.
请注意,每个构造函数都会减少要创建的内部框的数量,直到达到零。这是递归解决方案的本质。