簡體   English   中英

在Java中訪問深度嵌套的對象Box

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM