Pilha: Inverter uma palavra!

14 respostas
J

Ai pessoal…
Meu prof da facul deu um trabalho pra gente fazer um programa em java
usando uma pilha. Esse programa deve ler uma palavra, empilhar as letras
e, em seguida, escrever a palavra escrita invertida. Ele naum quer
que fique usando muitos metodos prontos.
Estou com dificuldades de como fazer isso!
Se alguem puder me ajudar!
Agradeço desde ja!
Obrigado

14 Respostas

tspaulino
public String inverterPalavra(String palavra){

	char pilha[]= new char[palavra.lentgh()]
	for(int i=0; i<palavra.length(); i++){	
		pilha[i]= palavra.charAt(palavra.length()-i);//faz a inversão da ordem dos caracteres
	}
	String palavraInvertida= new String(pilha);
	return palavraInvertida;
}

Acho q isso ae resolve…

Abraço!

Marky.Vasconcelos

Eu acho que seu professor quer que voce use a classe Stack.

Sobre Stacks:
http://java.sun.com/j2se/1.5.0/docs/api/java/util/Stack.html

Umas dicas:

Cria uma pilha e adicione cada letra da palavra a pilha.
Crie uma segunda pilha e va retirando a primeira letra da outra pilha(método pop()) e adicione a essa pilha.
Assim no final voce vai ter uma pilha com a palavra invertida.

abelgomes
package guj;

public class InverterStringSemAjuda {
	public static void main(String...args){
		char [] palavra = new char[20];
		String entrada = "o que for digitado";
		//isso seria uma maneira usando metodo pronto
		//palavra = entrada.toCharArray();
		
		//nao usando metodo pronto
		//aqui agente passa a palavra pra pilha
		for(int i=0;i<entrada.length();i++){
			palavra[i] = entrada.charAt(i);
		}
		
		//aqui imprimimos invertido
		for(int i=entrada.length();i>0;i--){
			System.out.print(palavra[i-1]);
		}
		
	}

}

ou faz do jeito que o tspaulino disse…mas acho que vc ta vendo logica/java basico…seu professor vai estranhar…hehehehe

ViniGodoy

No seu caso, a lógica dos colegas, apesar de realmente inverter a palavra, não serve. Teu professor pediu explicitamente para você usar uma pilha, o que nenhum dos dois fizeram.

Já que seu professor não quer métodos prontos, comece implementando sua classe de pilha.
Nesse sentido, esse tópico pode te ajudar:
http://www.guj.com.br/posts/list/55235.java

Depois, basta empilhar letra-a-letra da palavra, e desempilhar tudo, montando a nova String. Ela será invertida pelo próprio funcionamento da pilha (primeira que entra - primeira letra - é a última que sai).

Marky.Vasconcelos

ViniGodoy:
No seu caso, a lógica dos colegas, apesar de realmente inverter a palavra, não serve. Teu professor pediu explicitamente para você usar uma pilha, o que nenhum dos dois fizeram.

Já que seu professor não quer métodos prontos, comece implementando sua classe de pilha.
Nesse sentido, esse tópico pode te ajudar:
http://www.guj.com.br/posts/list/55235.java

Depois, basta empilhar letra-a-letra da palavra, e desempilhar tudo, montando a nova String. Ela será invertida pelo próprio funcionamento da pilha (primeira que entra - primeira letra - é a última que sai).

Criar duas pilhas ter em uma a palavra impilhada e montar a outra desempilhando essa não resolve o problema?
Pelo menos foi isso que eu tentei falar.

ViniGodoy

Não duplique tópicos:
http://www.guj.com.br/posts/list/104526.java

tspaulino

ViniGodoy:
No seu caso, a lógica dos colegas, apesar de realmente inverter a palavra, não serve. Teu professor pediu explicitamente para você usar uma pilha, o que nenhum dos dois fizeram.

Já que seu professor não quer métodos prontos, comece implementando sua classe de pilha.
Nesse sentido, esse tópico pode te ajudar:
http://www.guj.com.br/posts/list/55235.java

Depois, basta empilhar letra-a-letra da palavra, e desempilhar tudo, montando a nova String. Ela será invertida pelo próprio funcionamento da pilha (primeira que entra - primeira letra - é a última que sai).

O Vini tem razão… Eu implementei o conceito de fila e não o de pilha…
Me desculpe colega,

“Herrar é umano”!!

Espero que consiga a sua resposta aqui no fórum!

Abraço!

ViniGodoy

Sim, funciona sim. Eu tava falando era dos algoritmos mesmo. Acho que me expressei mal.
Eu disse a mesma coisa.

abelgomes

eu acho que eu implementei o conceito de pilha…apenas dividi em 2 for, um para preenche e outro para imprimir…mas o primeiro que entra na pilha é o ultimo a sair…
ou nao?

ViniGodoy

Sim. A idéia está lá.

Mas o professor dele, com 99.9% de chance, vai querer ver a estrutura de dados pilha implementada. Métodos como push e pop com certeza terão de estar presentes no trabalho dele. Até por conta do outro exercício que ele postou aqui no fórum.

Se você fosse professor de estrutura de dados dele, provavelmente também exigiria. :wink:

abelgomes

sim…isso é verdade…mas acho entao que o professor dele deveria pedri esses exercicios em C…

ViniGodoy

Por que em C? Por causa da manipulação de memória?
É melhor em uma linguagem OO, para o cara já estruturar uma classe de pilha, e ver como usar o polimorfismo.

Então, se for pela memória, seria melhor o C++. Aí tem as classes e o uso de memória, que fica mais claro no caso das listas encadeadas.

Agora, as 3 linguagens já tem isso implementado. Sendo que o Java e o C++ nas libs padrão da linguagem.

abelgomes

Acho que pra estudar estrutura de dados é melhor uma linguagem estruturada…Java ja tras tudo implementado lista,fila,pilha…Java tem tudo implementado…entao pra vc enteder realmente como funciona é mlhor uma linguagem estruturada…e pra entender polimorfismo ele estuda só OO que resolve…

São pontos de vistas diferentes…:wink:

ViniGodoy

Eu disse polimorfismo?
Nossa, eu tava viajando mesmo. Eu queria dizer encapsulamento.

Criado 10 de outubro de 2008
Ultima resposta 12 de out. de 2008
Respostas 14
Participantes 5