将变量作为方法参数传递

时间:2019-10-12 17:48:20

标签: java linked-list method-call

我正在处理链表代码,并想访问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);

我想看到草莓,但显然不会,因为s是字符串。但是有没有办法像javascript和PHP具有变量函数一样,用变量s替换所有这些后续调用?我使用字符串是因为可以在solLookup中使用amount参数来创建适当的下一个调用符号。谢谢!

2 个答案:

答案 0 :(得分:1)

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'字符串构建起来简单。

答案 1 :(得分:0)

假设这样实现链表:

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);

有很多方法可以改善这一点,但您会明白。