2016-07-30 12 views
-2

私はJavaで配列を使用してスタックを実装しようとしています。私のスタッククラスは、非静的メソッドpush、pop、peek、isemptyで構成されています。私はスタック実装をテストして、メインクラス内の静的でないメインメソッドでスタックをインスタンス化したいと考えています。私がしようとするとエラーが発生する"非静的メソッドpush(int)は静的コンテキストから参照できません" どうしたのですか?Javaでのスタック実装

Stack.java

public class Stack { 

private int top; 
private int[] storage; 

Stack(int capacity){ 
    if (capacity <= 0){ 
     throw new IllegalArgumentException(
       "Stack's capacity must be positive"); 
    } 
    storage = new int[capacity]; 
    top = -1; 
} 

void push(int value){ 
    if (top == storage.length) 
     throw new EmptyStackException(); 
    top++; 
    storage[top] = value; 
} 

int peek(){ 
    if (top == -1) 
     throw new EmptyStackException(); 
    return storage[top]; 
} 

int pop(){ 
    if (top == -1) 
     throw new EmptyStackException(); 
    return storage[top]; 
    } 
} 

Main.javaは

public class Main { 

public static void main(String[] args) { 
    new Stack(5); 
    Stack.push(5); 
    System.out.println(Stack.pop()); 

} 
} 
+0

それはhttps://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html –

+1

staticキーワードを使用してについてですが – khelwood

+0

'Stack'オブジェクトを保持するためには変数が必要です。' Stack' =新しいスタック(5); '' x.push(); ''と 'x.pop(); 'Stack s = new Stack(5);'あなたのメソッドは 's'で動作します。 – ajb

答えて

1

新しいインスタンスを作成しましたが、あなたは右のそれを作成した後、それを失ったので、どこにでもその参照を保存していませんでした。代わりに、あなたはそれを変数に割り当てる必要がありますし、それのメ​​ソッド適用:

​​
+0

あなたのコメントに応じて変更を加えました。私はエラーが発生している**例外 "メイン"スレッドjava.lang.NoSuchMethodExceptionで例外:Stack.main([Ljava.lang.String;)** – Batman

+0

実際私はプライベート変数を参照していると思う。ありがとう! – Batman