2014-12-07 2 views
0

사용자에게 대화 형 스택을 만들려고합니다. 데이터를 하나씩 또는 모두 팝핑 할 수있는 선택권을 부여합니다. 내 문제는, 그냥 데이터를 팝업하려고하면 그것은 빈 문자열을 제공합니다. 당신은 데이터를 두 번 팝업 도움을스택 상단을 팝업하지 못했습니다.

package Tugas; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.util.EmptyStackException; 
import java.util.Scanner; 
import java.util.Stack; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

public class myStack { 
private static Stack<Integer> stack; 
private static int size; 

public static void main(String[] args) { 
    System.out.println("Enter amount numbers : "); 
    size = inputData(); 
    createStack(size); 
    readData(); 

    Scanner scanner = new Scanner(System.in); 
    System.out.println("Take it All (y) or one by one (n)"); 
    String input = scanner.next(); 

    if (input.equals("y")) { 
     writeData(); 
    } else { 
     popData(); 
     writeData(); 

     String confirm; 
     Scanner scanner2 = new Scanner(System.in); 
     System.out.println("Take again ? "); 
     confirm = scanner2.next(); 

     if (confirm.equals("y")) { 
      popData(); 
      writeData(); 
     } 

    } 

} 

private static void createStack(int size) { 
    stack = new Stack<>(); 
} 

private static void writeData() { 
    int dataStack; 
    System.out.println(" The contains of data: "); 

    for (int i = 0; i < size; i++) { 
     try { 
      dataStack = stack.pop(); 
      System.out.println("Value of stack at " + (i + 1) + " : " + dataStack); 
     } catch (EmptyStackException e) { 
     } 
    } 
} 

private static void readData() { 
    int data; 
    System.out.println("===== all data ====="); 

    for (int i = 0; i < size; i++) { 
     System.out.print("The data at : " + (i + 1) + " : "); 
     data = inputData(); 
     stack.push(data); 
    } 
} 

private static void popData() { 
    int dataStack; 
    System.out.println("=== Pop a data : ==="); 
    dataStack = stack.pop(); 

} 

private static Integer inputData() { 
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
    String input = null; 
    try { 
     input = br.readLine(); 
    } catch (IOException ex) { 
     Logger.getLogger(Tumpukan.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    int data = Integer.parseInt(input); 
    return data; 
} 
} 

감사합니다 ...

+0

'writeData' 메소드에서했던 것처럼 아무 것도 해결하지 않지만 예외를 삼켜서는 안됩니다. 최소한 스택 추적을'e.printStackTrace()'로 출력하십시오. – Pshemo

+0

이렇게하면 다음과 같은 예외가 생깁니다. "main"스레드의 예외 java.util.EmptyStackException – user2975455

+2

질문에 가장 유용한 정보가 포함 된 임의의 주석을 게시하지 마십시오. ** 표시된 스택 번호를 ** ** 질문에 ** 표시하는 ** 전체 스택 추적 **을 ** 복사하여 붙여 넣기해야합니다. –

답변

2

: 루프에서 다음

popData(); 

그리고 :

에 한 번

여기

내 코드입니다 입력 :

writeData(); 

이것은 popData에 의해 이미 팝되었으므로 writeData은 1 개의 짧은 요소가된다는 것을 의미합니다.

관련 문제