2016-07-30 4 views
-2

Java에서 배열을 사용하여 스택을 구현하려고합니다. My Stack 클래스는 push, pop, peek 및 isempty가 아닌 정적 메서드로 구성됩니다. 기본 구현 클래스 내에서 정적이 아닌 main 메소드에서 스택을 인스턴스화하는 스택 구현을 테스트하려고합니다. 그렇게하려고하면 "정적이 아닌 메서드 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

정적 키워드를 사용하여 관하여를 – khelwood

+0

'Stack' 객체를 담을 변수가 필요합니다.'Stack.push();' 'Stack s = new Stack (5);'그러면 메소드는's'에서 작동 할 것입니다. – ajb

답변

1

새 인스턴스를 만들었습니다,하지만 당신은 바로 그것을 만든 후 그것을 잃어버린, 그래서 어디 그 참조를 저장하지 않았다. 대신 변수에 할당해야하며, 다음의 방법을 적용

public static void main(String[] args) { 
    Stack stack = new Stack(5); 
    stack.push(5); // invoked on an instance "stack" 
    System.out.println(stack.pop()); 
} 
+0

귀하의 의견에 따라 변경했습니다. 오류가 발생했습니다 ** 예외 스레드 "main"java.lang.NoSuchMethodException : Stack.main ([Ljava.lang.String;) ** – Batman

+0

사실 내가 생각하기 때문에 사적인 변수를 참조 해요. 감사 ! – Batman