2016-11-04 2 views
-4

Ich schreibe ein Programm, um Eingaben aus einer Textdatei (enthalten nur Ganzzahlen), in die verknüpfte Liste und die verknüpfte Liste anzuzeigen. Hier ist mein Code:nicht statische Methode kann nicht von einem ** statischen Kontext ** referenziert werden. Was ist der statische Inhalt hier?

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

} 

Es funktioniert jetzt, nachdem ich die Anzeigemethode geändert statische zu sein. Allerdings bevor ich zu statisch wechselte. Der Fehler sagte nicht-statische Methode Anzeige (Node) kann nicht von einem ** statischen Kontext verwiesen werden Ich lese ein Dokument über die statische und nicht-statische. Um ein No-Static zu nennen, muss ich eine Instanz instanziieren und dann wie instance.method aufrufen. Um die statische Methode aufzurufen, können Sie wie "class.method" aufrufen. Meine Frage basiert auf meinem Programm. Ich habe die Methode in keiner anderen Klasse erstellt, warum muss ich in die statische Methode wechseln? Wie lautet der so genannte statische Inhalt? Danke, dass du es mir erklärt hast.

+0

public ** statisch ** void main (String [] args). – DimaSan

+0

@ 1615903 Ich frage nach einem anderen. – Jeffery

+1

@ Jeffery ist ein komplettes Duplikat und erklärt, warum der Compiler dort nicht kompiliert wird. – SomeJavaGuy

Antwort

2

Ihre Hauptmethode ist der statische Kontext, und Sie versuchen, die nicht statische Methode display() aufzurufen. Das funktioniert nicht, auch wenn es in derselben Klasse ist. Um die Disply-Methode nicht statisch zu machen, müssen Sie dies tun.

public static void main(String[] args) throws FileNotFoundException{ 
    ReverseLL r = new ReverseLL(); 
    r.display(head); 

} 

public void display(Node head){ 
    ... 
} 
0

statischen Kontext des Aufrufs:

Class_Name.method_name(); 

nicht-statischen Kontext des Aufrufs:

Class_Name object_name = new Class_Name(); 
object_name.method_name(); 

Sie sollten nicht eine nicht nennen statische Methode mit einem statischen Kontext und umgekehrt.

0

Sie rufen Ihre display-Methode von der public static void main(String[] args) Methode.

Zum Umgehen zu statischen Methoden, die Sie tun können:

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... 
     }  
    } 
} 
0

Sie können auch verwenden, um die neue ReverseLL() dislpay (Kopf), es wird das Problem auszumerzen..

Verwandte Themen