[英]How can I change a LinkedList from a void method (Java)
這看起來很簡單,但我不太明白為什么這不起作用。
我想反轉我的 LinkedList 中的元素,我有一個工作方法,但我不能返回值,因為我的教授希望它是一個 void 方法。 我將如何 go 關於這個?
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;
public class ReverseTester {
public static void main(String[] args) {
LinkedList<String> employeeNames = new LinkedList<>();
employeeNames.addLast("Dick");
employeeNames.addLast("Harry");
employeeNames.addLast("Romeo");
employeeNames.addLast("Tom");
ListUtil.reverse(employeeNames);
System.out.println(employeeNames);
System.out.println("Expected: [Tom, Romeo, Harry, Dick]");
}
}
在我的 ListUtil class 中,它確實反轉了列表,但不返回值(因為它是無效的)但我不知道如何 go 關於在 ReverseTester ZA2F2ED4F8EBC2CBB4C21A29DC4 中設置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.
}
或者干脆
public static void reverse(LinkedList<String> strings) {
Collections.reverse(strings);
}
非原始 Java object 通過引用存儲,因此您不需要從 ListUtil::reverse 返回任何內容。 對 function 中的 object 所做的任何更改都將反映在 ReverseTester.java 中。 再次發生這種情況是因為非原始 Java 對象是通過引用存儲的。 基本上,您的代碼完全符合您的要求。 您創建一個 LinkedList,用項目填充它,然后反轉這些項目。
System.out.println(employeeNames);
會有問題。 盡管。 因為那只會打印對象的正式名稱,而不是它的內容。 如果要打印 Java 中列表的內容,可以執行以下操作:
for (String name : employeeNames) {
System.out.println(t);
}
這是我的第一個答案,如果我不夠清楚,請提出任何問題!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.