2016-11-04 25 views
-4

私は、テキストファイル(整数のみを含む)から入力を取得し、それをリンクリストに入れ、リンクリストを表示するプログラムを作成しています。ここに私のコードは次のとおりです。非静的メソッドは**静的コンテキスト**から参照できません。静的コンテンツとは何ですか?

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

} 

私は静的ように表示方法を変更した後、それが機能するようになりました。しかし、私は静的に変更する前に。エラー静的コンテキストから非静的メソッド表示(ノード)を参照することはできません静的および非静的に関するドキュメントを読んでいます。 no-staticを呼び出すには、インスタンスをインスタンス化してからinstance.methodのように呼び出す必要があります。静的メソッドを呼び出すには、 "class.method"のように呼び出すことができます。私の質問は私のプログラムに基づいています。私は他のクラスのメソッドを作成していない、なぜ私は静的メソッドに変更する必要がありますか?いわゆるという静的コンテンツとは何ですか??それを私に説明してくれてありがとう。

+0

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

+0

@ 1615903私は別のものを求めています。 – Jeffery

+1

@Jefferyそれは完全な複製であり、なぜコンパイラがコンパイルできないのかを説明します。 – SomeJavaGuy

答えて

2

あなたのメインメソッドは静的コンテキストで、非静的メソッドdisplay()を呼び出そうとしています。それは同じクラスにあっても動作しません。 displyメソッドを非静的にするには、これを行う必要があります。

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

} 

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

「静的」メソッドはクラスレベルに存在し、「非静的」メソッドはインスタンスレベルに存在します。あなたは、静的でないメソッドを呼び出すことができるあなたのクラスのインスタンスをpsvmメソッドに持たない。したがって、この方法は単に存在しません。

あなたはこの記事からより多くを読むことができます: What is the reason behind "non-static method cannot be referenced from a static context"?

0

呼び出しの静的コンテキスト:あなたは非を呼び出すべきではありません

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

Class_Name.method_name(); 

呼び出しの非staticコンテキストを静的コンテキストを使用した静的メソッド、またはその逆。

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

あなたも新しいR​​everseLL()dislpay(ヘッド)を使用することができ、それは問題を根絶します。