Olá pessoal!
Estou criando um código que faça a inversão de uma frase digitada pelo usuário usando uma pilha.
O que fiz ficou assim:
public interface Stack {
public int size();
public boolean isEmpty();
public void push(Object str);
public Object pop();
public Object top();
}
public class Pilha implements Stack{
private int capacidade,ultimo; // capacidade e ultimo item a entrar no vetor
private Object[] vetor;
public Pilha(){
this(100);
}
public Pilha(int capacidade){
this.capacidade = capacidade;
vetor = new Object[this.capacidade];
ultimo = -1; //o vetor não possui itens na construção
}
public int size() {
return (ultimo + 1);
}
public boolean isEmpty() {
return (ultimo < 0);
}
public boolean isFull(){
return (ultimo >= (this.capacidade - 1));
}
public void push(Object obj) {
if (isFull()){
System.out.println("Pilha cheia");
}
vetor[++ultimo] = obj;
}
public Object pop() {
if (isEmpty()){
System.out.println("Pilha vazia");
}
return (vetor[ultimo--]);
}
public Object top() {
return (vetor[ultimo]);
}
public int tam(){
return vetor.length;
}
public void imprimirRetirar(){
for (int i = 0; i < tam(); i++){
System.out.println(pop());
}
}
public void apenasImprimir(){
for(int i = (size()-1); i > 0; i--){
System.out.println(vetor[i]);
}
}
}
import java.util.Scanner;
public class InverteFrase {
private Pilha pilha;
private Object frase;
private int capacidade;
//construtor
public InverteFrase(int capacidade){
this.capacidade = capacidade;
pilha = new Pilha(this.capacidade);
frase = null;
}
//empilha palavras
public void setFrase(Object palavra){
if(pilha.isFull()){
return;
}
this.frase = palavra;
pilha.push(this.frase);
}
//desempilha palavras
public Object getFrase(){
if(pilha.isEmpty()){
return null;
}
return pilha.pop();
}
//inverte o conteúdo da pilha e imprime
public void getImprimePilhaInvertida(){
for (int i = 0; i < pilha.tam(); i++) {
System.out.print(pilha.pop());
}
}
public static void main(String args[]){
int temp = 0;
Scanner leitor = new Scanner(System.in);
System.out.println("Quantas palavras tem sua frase? ");
temp = leitor.nextInt();
InverteFrase frase = new InverteFrase(temp);
System.out.println("Digite a primeira palavra: ");
for (int i = 0; i < temp; i++ ){
frase.setFrase(leitor.next() + " ");
if (i < (temp - 1)){
System.out.println("Digite a próxima palavra: ");
}
}
System.out.println("\nSua frase invetida ficou assim:");
frase.getImprimePilhaInvertida();
System.out.println();
}
}
Como os senhores puderam perceber, no meu programinha é preciso que o usuário primeiramente digite o número de palavras existentes na frase que irá digitar.
Gostaria de aprimorá-lo para que o usuário já digite diretamente a frase completa e o programa conte o número de palavras existentes na frase, separe-as, empilhe-as e em seguida a imprima invertida.
Alguém pode me ajudar na criação desse algoritmo?

)