2014-12-07 3 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(); 

А затем в цикле in:

writeData(); 

Это значит, что writeData будет одним из ключевых элементов, поскольку он уже был выбит popData.

Смежные вопросы