首先,我是这方面的新手,所以如果我犯了一些正式的错误,请不要太努力。
因此,我试图学习一些有关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);
}
}
答案 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);
}
}