链接列表无法解析

时间:2018-10-24 22:11:16

标签: java

首先,我是这方面的新手,所以如果我犯了一些正式的错误,请不要太努力。

因此,我试图学习一些有关Java中链表的信息。现在,我在main方法(称为“ liste”)和方法“ addToList”(其中应将字符串添加到我的列表)中创建了一个链表。

primaryStage.addEventHandler(KeyEvent.KEY_PRESSED, (key) -> {

        if(key.getCode()==KeyCode.W){
            objOne.setLayoutY(objOne.getLayoutY() -  10);
        }
      //other keys

   }

当我在main方法中添加一个元素并将其打印出来时,它可以正常工作,但是当我这样做时,会出现此错误:

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

}

2 个答案:

答案 0 :(得分:1)

您正在函数liste中使用变量addToList。但是变量是在main函数中定义的,而在addToList中不可用。

让我们遍历错误消息

  

线程“ main”中的异常java.lang.Error:未解决的编译问题:

所以编译不起作用,因为

  

列表无法解析

编译器不知道符号liste。它无法解决其含义。

  

在LinkedLists.addToList(LinkedLists.java:11)​​

最上面的条目显示了编译器在哪里遇到此问题。在这种情况下,它是第11行文件addToList中的LinkedLIsts.java函数。

如果您想与liste共享addToList,则可以将其作为参数传递:

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

答案 1 :(得分:0)

问题在于liste变量的可见性。

在方法内部定义变量时,它仅在方法内部可见。

要使变量在整个类中可见,必须将其定义为属性。

编辑我

  

但是,请您具体说明一下您的所作所为?我不明白   为什么有两个列表

为什么直接从main()调用方法或属性时,与静态方法和调用有关的问题?

如声明所示,public 静态 void main(String args[])是一种static方法(顺便说一下,它是Java程序执行的起点)。

静态方法和属性对于一个类的所有实例都是通用的,即使没有该类的实例化对象也存在。

非静态属性和方法对于每个实例化对象都是本地的(不同对象的属性可以采用不同的值),因此它们依赖于要实例化的对象。

运行诸如main()之类的静态方法时,不能保证非静态属性将存在,​​即使它们存在于一个或多个对象中,也无法针对特定实例,因此您不能调用非静态方法或在静态方法中使用非静态属性。

但是程序以静态方法main()开始。因此,您要做的是在main()内部创建运行程序所需的实例,并在这些创建的对象上调用必要的非静态方法和属性。您可以将main()视为对象可以执行其操作的地方。

在示例中,类LinkedList s 既包含开始执行的主要方法,又包含实现LinkedList s 对象的逻辑的方法和属性(当使用包含main()方法的其他类中的此类时,这一点将变得更加清楚。)

因此,在静态方法main()中,我们创建了LinkedList s 类的实例,在该实例上我们可以调用非静态方法。 实例化一个对象(使用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);
    }

}