Как добавить объект в качестве дочернего объекта java - PullRequest
0 голосов
/ 29 мая 2020

Я застрял с тех пор, как решить проблему, касающуюся добавления объекта в качестве дочернего для другого объекта: у меня есть этот класс "Snapo", который содержит объект Snapo, это массив, содержащий первый индекс (m), который является целым числом, за которым следует список Snapo -> [m (s1 s2 ... sn)]. Теперь я написал код для добавления дочернего элемента с атрибутом «m» к основному Snapo, но я не могу понять, как добавить Snapo к основному Snapo, например: [8 ([5 ([7] [ 6])] [1 ([4] [3] [2])])] -> где «8», «5» и «1» - это «m», а другие числа - это список Snapo

объявление переменных:

private final static int SIZE = 100;
private int m;
public int[] arr = new int[SIZE];
private int top=0;

Snapo (int m) {
    this.m = m;
    arr[0] = this.m;
}

Это конструктор класса ^

public void addChild (Snapo s) {
    top++;
    for (int i = top; i > 1; i--) {
        arr[i] = arr[i - 1];
    }
    arr[1] = s.arr[0];
}

Это метод addChild, который добавляет одно число к основному Snapo ^ (top инициализируется как частное int = 0)

Моя программа работает с такими входами, как:

Snapo s1 = new Snapo(1);

s1.addChild(new Snapo(2));
s1.addChild(new Snapo(3));

Но, очевидно, не с такими входами, как:

Snapo s3 = new Snapo(8);
s3.addChild(s1);
s3.addChild(s2);

1 Ответ

0 голосов
/ 29 мая 2020

Может быть, этот пример может быть полезен

import java.util.ArrayList;
import java.util.List;
class TestAddC
{
    public static void main(String args[])
    {
        TestAddC t= new TestAddC();
        Snapo s1 = t.new Snapo("s1");
        s1.addChild(t.new Snapo("s2"));
        Snapo s3 = t.new Snapo("s3");
        s1.addChild(s3);
        Snapo s4 = t.new Snapo("s4");
        s3.addChild(s4);

        System.out.println(s1);
        System.out.println(s3);


    }
    class Snapo
    {
        List<Snapo> listC= new ArrayList<Snapo>();
        String name;
        Snapo(String name)
        {
            this.name = name;
        }
        public void addChild(Snapo obj)
        {
            listC.add(obj);
        }
        public String toString()
        {
            StringBuffer sb = new StringBuffer();
            sb.append("parent="+this.name+"\n");
            //only first level
            listC.forEach(t->sb.append("child="+t.name+"\n"));
            return sb.toString();
        }
    }
}

Вывод

parent=s1
child=s2
child=s3

parent=s3
child=s4

Версия 2: с массивами

class TestAddC
{
    public static void main(String args[])
    {
        TestAddC t= new TestAddC();
        Snapo s1 = t.new Snapo("s1");
        s1.addChild(t.new Snapo("s2"));
        Snapo s3 = t.new Snapo("s3");
        s1.addChild(s3);
        Snapo s4 = t.new Snapo("s4");
        s3.addChild(s4);
        s3.addChild(s4);
        s3.addChild(s4);
        s3.addChild(s4);
        s3.addChild(s1);

        System.out.println(s1);
        System.out.println(s3);
    }
    class Snapo
    {

        //add here up to how many children
        Snapo[] listArr = new Snapo[3];
        int counter = 0;
        String name;
        Snapo(String name)
        {
            this.name = name;
        }
        private int getNext()
        {
            System.out.println(counter);
            return (counter<listArr.length)? counter++ :(listArr.length -1);
        }
        public void addChild(Snapo obj)
        {
            listArr[getNext()] = obj;
        }
        public String toString()
        {
            StringBuffer sb = new StringBuffer();
            sb.append("parent="+this.name+"\n");
            //only first level
            for(int i=0;i<listArr.length;i++)
            {
                if(listArr[i] instanceof Snapo )
                {
                    sb.append("child="+listArr[i].name+"\n");
                }
            }
            return sb.toString();
        }
    }
}

Вывод

parent=s1
child=s2
child=s3

//only 3 since arrsize is 3 (added 4, always last one have the last child)
parent=s3
child=s4
child=s4
child=s1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...