Передача переменной в качестве аргумента метода - PullRequest
0 голосов
/ 12 октября 2019

Я работаю над кодом связанного списка и хотел получить доступ к head.next.next.data. Есть ли способ, где я могу сохранить .next.next.data в переменной x, чтобы я мог сделать вызов head.x и получить результат, если у меня есть данные, заполненные в списке? Я хочу реализовать

public class CustomSOL<E> implements SOL<E>  
{
    private static class customNode<E>
    {
        private customNode<E> next;
        private E data;

        public customNode(E dataItem)
        {
            this.data = dataItem;
            this.next = null;
        }

        private customNode(E dataItem, customNode<E> nodeRef)
        {
            this.data = dataItem;
            this.next = nodeRef;
        }
    }

    private customNode<E> head;
    private int size;

    public CustomSOL()
    {
        head = null;
        size = 0;
    }


    public void solLookup(int amount)
    {
        String s = "next";
        StringBuilder sb = new StringBuilder(14);
        for(int i = 0; i < amount; i++)
            sb.append(".").append(s);

        System.out.println(head.s.data);
    }
}

, поэтому в основном, если у меня есть

        CustomSOL<String> list = new CustomSOL<String>();
        list.solAdd("Apple");
        list.solAdd("Orange");
        list.solAdd("Banana");
        list.solAdd("Strawberry");
        list.solAdd("Papaya");

и я вызываю list.solLookup (3):

String s = "next.next.next";   
System.out.println(head.s.data);

Я хочусм. Strawberry распечатка, чего, очевидно, не будет, потому что s - строка. Но есть ли способ, подобно тому, как у javascript и PHP есть переменные функции, заменить все эти следующие вызовы на переменную s? Я использую строку, потому что я могу использовать параметр количества в solLookup, чтобы создать соответствующие примечания следующего вызова. Спасибо!

Ответы [ 2 ]

1 голос
/ 12 октября 2019

head.next.next.data является (предположительно) ссылкой на некоторые данные. Компилятор Java превращает эту фразу в исполняемый код для извлечения нужных вам данных.

".next.next.data" - это просто последовательность символов Unicode в программе, представленная буквально или построенная во время выполнения. Невозможно (в простом программировании) превратить это в ссылку во время выполнения на некоторые данные, которые просто именуются аналогично символам в строке. Это работа для компилятора Java, и компилятор завершил свою работу до того, как ваша программа запустится.

Существуют продвинутые методы («рефлексия»), но я бы не советовал их вам при том, что, как я предполагаю,быть вашим уровнем знаний.

Чтобы получить объект k-го уровня, вы просто перебираете список 'k' раз:

public Node get(int k) {
    Node n = head;
    while (k > 0) {
       n = n.next;  // or n.next() if need be
       k--;
    }
    return n;
}

Это проще, чем создавать строку с вхождениями 'k' в 'next'.

0 голосов
/ 12 октября 2019

Предположим, такая реализация связанного списка:

class List<T> {
    static class Head<T> {
        public T value;
        public Head<T> next;

        public Head(T value) {
            this.value = value;
        }
    }

    public Head<T> head;
}

Вы можете использовать его следующим образом:

List<String> list = new List<>();

list.head = new List.Head<>("a");
list.head.next = new List.Head<>("b");

System.out.println(list.head.next.value);

Есть много способов, как вы можете улучшить это, но вы поняли идею.

...