Как получить рекурсивный доступ к конечным вложенным объектам в java

#java #recursion

#java #рекурсия

Вопрос:

Я хочу получить доступ к другим вложенным объектам рекурсивно, используя последний объект, который является «mul1», потому что он содержит все остальные объекты. Но он возвращает только один объект. Это не векторный объект. Пожалуйста, любой может дать решение для доступа к этим вложенным объектам. введите описание изображения здесь

     FormulaElement varX=new VariableElement("X");
    FormulaElement c7=new ConstantElement(7);       
    FunctionElement plus=new PlusFunctionElement();
    plus.addArgument(varX); 
    plus.addArgument(c7);


    FormulaElement c2=new ConstantElement(2);       
    FunctionElement min=new MinusFunctionElement();
    min.addArgument(varX);
    min.addArgument(c2);


    FunctionElement mul1=new MultipleFunctionElement();
    mul1.addArgument(plus);
    mul1.addArgument(min);
  

Редактировать:

Элемент формулы пока не содержит никакого метода. Я хочу добавить этот рекурсивный метод для поиска вложенных элементов в классе FormulaElement. это мой класс FunctionElement :

 public class FunctionElement extends FormulaElement {

private Vector<FormulaElement> arguments;

public FunctionElement() {
    arguments = new Vector<FormulaElement>();
}

public void addArg(FormulaElement element) {
    arguments.add(element);
}

public void setArgs(Vector<FormulaElement> arguments) {
    this.arguments = arguments;
}

public Vector<FormulaElement> getArgs() {
    return arguments;
}

public FormulaElement getArg(int i) {
    return arguments.get(i);
}

public String toString() {
    return this.toString();
}

}       
  

Комментарии:

1. что значит «возвращает только один объект», что делает? какой метод?

2. Отладчик.. Отладчик.. Отладчик..

3. Он должен иметь что-то вроде mul1.getArguments() . Найдите класс или попробуйте автозаполнение mul1.| .

4. Я жестко запрограммировал то, что внутри этого метода. предположим, что этот метод возвращает только объект «mul1». но он содержит все другие вложенные объекты. Этот объект «mul1» содержит объекты «plus» и «min». объект «plus» содержит объекты «varX» и «c7». объект «min» содержит как объекты «varX», так и «c2».

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

Ответ №1:

СЛЕДИТЕ ЗА ВЫЗЫВАЮЩИМ И ПЕРЕДАННЫМ АРГУМЕНТОМ

Ну, вероятно, не лучшее решение, но вы можете использовать ArrayList (или, возможно, что-то еще, чтобы развить эту идею), чтобы отслеживать caller и argument .

Например, вы можете изменить свой addArgument метод на addArgument(caller,argument); и после этого внутри argument вы можете добавить оба этих объекта в свою переменную уровня класса ArrayList<Object[]> .

Но вашей обязанностью будет проверить, не должно ли быть дублирования ArrayList .

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