[英]Accessing a deeply nested object Box in Java
假設您有一個盒子,最多可以包含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的類和主要方法。 有人告訴我使用遞歸,但我無法弄清楚。
正如您所描述的(每個框最多包含1個框),您所擁有的實際上是一個鏈表。 您不需要遞歸,只需遍歷列表即可將當前框保留在變量中。
但是可能您要解決的問題(一個盒子可以包含多個盒子)是一棵樹,而您需要的是該樹的搜索功能。 在不了解樹中預期的節點分布的情況下,我極力建議您進行DFS( https://en.wikipedia.org/wiki/Depth-first_search ),因為它易於實現並且在廣泛的范圍內都表現出色樹類型。
一種方法是保留對最外框的引用。
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.
請注意,每個構造函數都會減少要創建的內部框的數量,直到達到零為止。 這是遞歸解決方案的本質。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.