Java tutorial
/** * ------------------------------------------------------ * Laboratrio de Linguagens e Tcnicas Adaptativas * Escola Politcnica, Universidade So Paulo * ------------------------------------------------------ * * This program is free software: you can redistribute it * and/or modify it under the terms of the GNU General * Public License as published by the Free Software * Foundation, either version 3 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will * be useful, but WITHOUT ANY WARRANTY; without even the * implied warranty of MERCHANTABILITY or FITNESS FOR A * PARTICULAR PURPOSE. See the GNU General Public License * for more details. * **/ package br.usp.poli.lta.cereda.aa.model; import java.util.ArrayDeque; import java.util.Deque; import org.apache.commons.lang3.StringUtils; /** * Define a estrutura de dados de pilha para ser utilizada pelo autmato * adaptativo. A pilha, neste caso, permite apenas a manipulao de elementos * que esto no topo. * @author Paulo Roberto Massa Cereda * @version 1.0 * @since 1.0 */ public class Stack { // atributo da classe, que a pilha private final Deque<State> stack; /** * Construtor. Inicializa a pilha. */ public Stack() { stack = new ArrayDeque<>(); } /** * Adiciona o estado informado no topo da pilha. * @param entry Estado a ser adicionado no topo da pilha. */ public void push(State entry) { stack.addFirst(entry); } /** * Remove o estado do topo da pilha e o retorna. * @return Estado que estava no topo da pilha. */ public State pop() { State result = stack.getFirst(); stack.removeFirst(); return result; } /** * Retorna o estado que est no topo da pilha, sem, entretanto, remov-lo. * @return Estado que est no topo da pilha. */ public State top() { return stack.getFirst(); } /** * Verifica se a pilha est vazia. * @return Valor lgico que informa se a pilha est vazia. */ public boolean isEmpty() { return stack.isEmpty(); } /** * Limpa a pilha, removendo todos os elementos existentes. */ public void clear() { stack.clear(); } /** * Retorna uma representao textual da pilha. * @param separator Separador dos elementos. * @return Representao textual da pilha. */ private String printElements(String separator) { StringBuilder sb = new StringBuilder(); sb.append("["); sb.append(StringUtils.join(stack, separator)); sb.append("]"); return sb.toString(); } /** * Retorna uma representao textual da pilha. * @return Representao textual da pilha. */ @Override public String toString() { String div = " :: "; StringBuilder sb = new StringBuilder(); sb.append("Pilha: { "); sb.append("A pilha est vazia? ").append(printAnswer(isEmpty())); if (!isEmpty()) { sb.append(div).append("Elementos (topo esquerda): "); sb.append(printElements(div)); } sb.append(" }"); return sb.toString(); } /** * Retorna uma representao textual do valor lgico informado. * @param value Valor lgico. * @return Representao textual do valor lgico. */ private String printAnswer(boolean value) { String yes = "sim"; String no = "no"; return (value ? yes : no); } }