Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从void方法(Java)更改LinkedList_Java_Linked List_Void - Fatal编程技术网

如何从void方法(Java)更改LinkedList

如何从void方法(Java)更改LinkedList,java,linked-list,void,Java,Linked List,Void,这看起来很简单,但我不太明白为什么这不起作用 我想反转LinkedList中我有一个工作方法的元素,但是我不能返回值,因为我的教授希望它是一个void方法。我该怎么办 import java.util.LinkedList; public class ListUtil { public static void reverse(LinkedList<String> strings) { LinkedList<String> reverseLinked

这看起来很简单,但我不太明白为什么这不起作用

我想反转LinkedList中我有一个工作方法的元素,但是我不能返回值,因为我的教授希望它是一个void方法。我该怎么办

import java.util.LinkedList;
public class ListUtil {
    public static void reverse(LinkedList<String> strings) {
        LinkedList<String> reverseLinkedList = new LinkedList<>();
        for(int i = strings.size() - 1; i >= 0; i--) {
            reverseLinkedList.add(strings.get(i));
        }
        strings = reverseLinkedList;
        System.out.println(strings);
    }
}
import java.util.LinkedList;
公共类ListUtil{
公共静态无效反向(LinkedList字符串){
LinkedList reverseLinkedList=新建LinkedList();
对于(int i=strings.size()-1;i>=0;i--){
reverseLinkedList.add(strings.get(i));
}
strings=reverseLinkedList;
System.out.println(字符串);
}
}
import java.util.LinkedList;
公共类反向测试仪{
公共静态void main(字符串[]args){
LinkedList employeeNames=新LinkedList();
雇员姓名:addLast(“迪克”);
雇员姓名、地址(“哈里”);
雇员姓名:addLast(“罗密欧”);
雇员姓名、地址(“Tom”);
ListUtil.反向(雇员姓名);
系统输出打印LN(员工姓名);
System.out.println(“预期:[汤姆、罗密欧、哈利、迪克]”;
}
}
在我的ListUtil类中,它确实反转了列表,但没有返回值(因为它是空的),但我不知道如何在ReverseTester类中设置employeeName


我知道这可能非常简单,但我一辈子都没能弄明白这一点,非常感谢您的帮助。

清空并重新填充现有列表,而不是替换它

public static void reverse(LinkedList<String> strings) {
    List<String> temp = new ArrayList<>(strings);   // Copy the contents of the original list. Pass the original list to constructor of our duplicate list.
    strings.clear();                                // Empty the original list.
    for (String e : temp)
        strings.addFirst(e);                        // Refill the original list using elements from our duplicate list.
}
publicstaticvoidreverse(LinkedList字符串){
List temp=new ArrayList(strings);//复制原始列表的内容。将原始列表传递给复制列表的构造函数。
strings.clear();//清空原始列表。
用于(字符串e:temp)
strings.addFirst(e);//使用重复列表中的元素重新填充原始列表。
}
或者干脆

public static void reverse(LinkedList<String> strings) {
    Collections.reverse(strings);
}
publicstaticvoidreverse(LinkedList字符串){
集合。反向(字符串);
}

非原语Java对象通过引用存储,因此不需要从ListUtil::reverse返回任何内容。对函数中的对象所做的任何更改都将反映在ReverseTester.java中。这是因为非原语Java对象也是通过引用存储的。基本上,你的代码就是你想要它做的。创建一个LinkedList,用项目填充它,然后反转这些项目

您将遇到
System.out.println(employeeNames)问题不过。因为这只会打印对象的正式名称,而不是内容。如果要用Java打印列表的内容,可以执行以下操作:

for (String name : employeeNames) {
    System.out.println(t);
}

这是我的第一个答案,如果我不够清楚,请提问

Dave Newton我希望我可以,这会更容易,或者即使我可以让这个方法返回一个链接列表,但我的教授不希望Sadly将你当前的链接列表复制/克隆到新的链接列表,然后在原来的链接列表中进行反向旅行,这样做,您不需要像原版那样返回reversed@HưngChu您是说将LinkedList复制到另一个类中吗?谢谢,这很好,但是这如何改变我的tester类中的列表,而我的原始代码没有改变?
System.out.println(employeeNames)
是我的教授想要的,并希望它以相反的方式打印列表。这很有帮助,但我不知道非原始对象以及它们是如何工作的。我在上面的答案中使用了for循环,这确实反映到了我的测试课上。答案非常清楚!我对Java还比较陌生,只是不理解为什么思考会起作用的一些原因。你把一切都搞定了!
for (String name : employeeNames) {
    System.out.println(t);
}