我正在编写一个程序来从文本文件中获取输入(仅包含整数),将其放入链接列表并显示链接列表。这是我的代码:
import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
class Node{
int value;
Node next;
Node(){
next = null;
}
}
public class ReverseLL{
public static void main(String[] args) throws FileNotFoundException{
Scanner in = new Scanner(new File("input.txt"));
Node head = null;
Node tail = null;
while(in.hasNextInt()){
Node ptr = new Node();
ptr.value = in.nextInt();
if(head == null){
head = ptr;
tail = ptr;
}else{
tail.next = ptr;
}
tail = ptr;
}
display(head);
in.close();
}
static void display(Node head){
while(head!=null){
System.out.print(head.value + " " + "\n");
head = head.next;
}
}
}
我将显示方法更改为静态后,现在可以正常工作了。然而在我改为静态之前。错误表示非静态方法显示(Node)无法从**静态上下文中引用我读了一些关于静态和非静态的文档。要调用非静态,我需要实例化一个实例,然后像instance.method一样调用。要调用静态方法,可以调用“class.method”。我的问题是基于我的计划。我没有在其他类中创建方法,为什么我需要更改为静态方法?什么是所谓的静态内容?谢谢你向我解释。
答案 0 :(得分:2)
你的main方法是静态上下文,你试图从中调用非静态方法display()。即使它属于同一类,这也不起作用。要使disply方法非静态,你必须这样做。
public static void main(String[] args) throws FileNotFoundException{
ReverseLL r = new ReverseLL();
r.display(head);
}
public void display(Node head){
...
}
答案 1 :(得分:1)
调用的静态上下文:
Class_Name.method_name();
非静态调用上下文:
Class_Name object_name = new Class_Name();
object_name.method_name();
您不应该使用静态上下文调用非静态方法,反之亦然。
答案 2 :(得分:0)
简单地说,“静态”方法存在于类级别,而“非静态”方法存在于实例级别。在psvm方法中没有类的实例,从那里可以调用非静态方法。所以这种方法根本不存在。
您可以在这篇文章中阅读更多内容: relative paths instead of absolute ones
答案 3 :(得分:0)
您正在使用display
方法调用public static void main(String[] args)
方法。
要解决必须使用静态方法的问题:
public class ReverseLL{
public void run() throws FileNotFoundException{
Scanner in = new Scanner(new File("input.txt"));
Node head = null;
Node tail = null;
while(in.hasNextInt()){
Node ptr = new Node();
ptr.value = in.nextInt();
if(head == null){
head = ptr;
tail = ptr;
}else{
tail.next = ptr;
}
tail = ptr;
}
display(head);
in.close();
}
void display(Node head){
while(head!=null){
System.out.print(head.value + " " + "\n");
head = head.next;
}
}
public static void main(String[] args){
ReverseLL reverseLL = new ReverseLL();
try{
reverseLL.run();
}catch(FileNotFoundException e){
// handle ex...
}
}
}
答案 4 :(得分:0)
你也可以使用新的ReverseLL()。dislpay(head);它会根除问题。