簡體   English   中英

鏈表無法解析

[英]Linked list cannot be resolved

所以首先我是這方面的新手,所以如果我犯了一些正式的錯誤,請不要太辛苦。

所以我想學習一些關於 Java 中鏈表的知識。 我現在在 main 方法中創建了一個鏈接列表,它稱為“liste”和一個稱為“addToList”的方法,它應該向我的列表中添加一個字符串。

import java.util.LinkedList;

public class LinkedLists{

    public static void main(String[] args) {
        LinkedList<String> liste = new LinkedList<String>(); 
        addToList("Mario");
    }

    public static void addToList(String pElement) {
        liste.add(pElement);
    }

}

當我在 main 方法中添加一個元素並將其打印出來時,它工作正常,但是當我這樣做時,我得到了這個錯誤:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    liste cannot be resolved

        at LinkedLists.addToList(LinkedLists.java:11)
        at LinkedLists.main(LinkedLists.java:7)

您正在使用的變量liste在功能addToList 但是該變量是在main函數中定義的,在addToList不可用。

讓我們來看看錯誤消息

線程“main”中的異常 java.lang.Error: 未解決的編譯問題:

所以編譯不起作用,因為

liste 無法解析

編譯器不知道符號liste 它無法解析其含義。

在 LinkedLists.addToList(LinkedLists.java:11)

最上面的條目向您顯示編譯器在何處遇到此問題。 在本例中,它是文件LinkedLIsts.java中第 11 行的addToList函數。

如果您想與addToList共享liste ,您可以將其作為參數傳遞:

public class LinkedLists{

    public static void main(String[] args) {
        LinkedList<String> liste = new LinkedList<String>(); 
        addToList(liste, "Mario");
    }

    public static void addToList(LinkedList<String> liste. String pElement) {
        liste.add(pElement);
    }
}

或者你把它從main移到LinkedLists的范圍內:

public class LinkedLists{

    static LinkedList<String> liste = new LinkedList<String>(); 

    public static void main(String[] args) {
        addToList("Mario");
    }

    public static void addToList(String pElement) {
        liste.add(pElement);
    }
}

問題是liste變量的可見性。

在方法內部定義變量時,它僅在方法內部可見。

要使變量在整個類中可見,必須將其定義為屬性。

編輯我

但是你能解釋一下你到底做了什么嗎? 我不明白為什么有兩個列表

直接從main()調用方法或屬性時,為什么會出現與靜態方法和調用相關的問題?

由於聲明表明public static void main(String args[])是一個static方法(順便說一下,它是 java 程序的執行起點)。

靜態方法和屬性對於類的所有實例都是通用的,即使沒有該類的實例化對象也存在。

非靜態屬性和方法對於每個實例化對象都是本地的(不同對象的屬性可以采用不同的值),因此它們依賴於已實例化的對象。

當像main()這樣的靜態方法運行時,不能保證非靜態屬性會存在,即使它們存在於一個或多個對象中,也無法針對特定實例,因此您不能調用非靜態方法或在靜態方法中使用非靜態屬性。

但是程序以一個靜態方法開始: main() 所以你要做的是在 main() 中創建運行程序所需的實例,並在這些創建的對象上調用必要的非靜態方法和屬性。 您可以將main()視為對象可以執行其操作的地方。

在這個例子中,類 LinkedList s包含開始執行的 main 方法,以及實現 LinkedList s對象邏輯的方法和屬性(當這個類從包含main()的不同類中使用時,這變得更加清晰main()方法)。

因此,在靜態方法main() ,我們創建的LinkedList類的實例,上,我們可以調用非靜態方法。 當一個對象被實例化時(使用new LinkedLists() ),這個新對象有它自己的liste屬性副本,可以通過調用這個對象上的非靜態方法來操作。

在這種情況下,我們只用一個LindedList對象s的工作,但是,可能我們可以有類的多個實例,每一個與它自己的靠山liste屬性,並根據我們的需要在一個或其他操作。

public class LinkedLists{
    private LinkedList<String> liste = new LinkedList<String>(); 

    public static void main(String[] args) {

        LinkedLists linkedListsInstance= new LinkedLists();
        linkedListsInstance.addToList("Mario");
        linkedListsInstance.printList();

    }

    public void addToList(String pElement) {
        liste.add(pElement);
    }

    public void printList(){
        System.out.println(liste);
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM