dúvidas extressantes

estou com um problema de lógica na minha cabeça, tenho de fazer esse exercício, mas nao estou dando conta de fazer correto… alguem pode me dar uma ajuda…
esse é o enunciado…
[color=red]Escreva um algoritmo, usando uma Pilha, que inverte as letras de cada palavra de um
texto terminado por ponto (?.?) preservando a ordem das palavras. Por exemplo, dado o
texto:
ESTE EXERCÍCIO É MUITO FÁCIL.
a saída deve será
ETSE OICÍCREXE É OTIUM LICÁF.
[/color]

este é o meu código

[code]import java.util.Scanner;

public class Inverte2 {
private static String s;

public static void main(String[] args) {
	Metodos p1= new Metodos(500);
	System.out.println("Digite Uma Frase Qualquer ou uma Palavra Qualquer");
	Scanner n = new Scanner(System.in);
	s=n.nextLine();
	for(int i=0;i<s.length();i++)
	{
		p1.push(s.charAt(i));
	if(s.charAt(i)!=(' '))
		p1.push(s.charAt(i));
	else
		System.out.print(p1.pop());
	
	}
	while(!p1.empty())
		System.out.print(p1.pop());
}

}
[/code]

a saída está assim:

Digite Uma Frase Qualquer ou uma Palavra Qualquer
Marcos Vinicius Jacovais
Saída-> ssiiaavvooccaaJJssuuiicciinniiVVssooccrraaMM

Vc esta colocando cada caracter 2 vezes na pilha, percebeu?

Boa noite colegas !

O que é “Metodos” ?

[]s

Não custa citar esse link:
http://www.guj.com.br/posts/list/55235.java#289988

Com uma implementação de pilha feita pelo Mantu e muito bem comentada.

Cara, vc empilhou a frase toda. Pela ordem do exercicio vc deve empilhar cada palavra individualmente para não comprometer a ordem delas na frase.
Ex.: A saida do seu nome deveria ser socraM suiciniV siavocaJ

O erro dentro do teu for, onde tu coloca 2 vezees cada caractere.



	    for(int i=0;i<s.length();i++) {
		  p1.push(s.charAt(i)); // Coloca 1 vez, todos os caracteres
		  if(s.charAt(i)!=(' '))
			p1.push(s.charAt(i)); // Coloca de novo!!!! Mas só se não for espaço!!
		  else
			System.out.print(p1.pop());
	    }

Esse exercícios são legais. :lol: Veja o código:

      
      public static void main(String[] args) {
//	    Metodos p1= new Metodos(500);
	    Stack p1 = new Stack(); // Eu uso Stack, mas acredito que a tua classe Metodos faça a mesma coisa, não??
	    System.out.println("Digite Uma Frase Qualquer ou uma Palavra Qualquer");
	    String s = "Diego Inácio Goergen"; // String inicial
	    String[] ss = s.split(" "); // Divido as palavras, pela ordem do exercício, é para ser assim (  ETSE OICÍCREXE É OTIUM LICÁF )
	    
	    for (int i = 0; i < ss.length; i++){ // Percorro todas as palavras digitadas
		  String palavra = ss[i].trim(); // Pego a palavra atual do array ( apenas para visualizar melhor )
		  
		  for (int j = 0; j < palavra.length(); j++){ // percoro toda a palavra
			p1.push(new Character(palavra.charAt(j))); // Coloco a letra na pilha. Como uso o Stack, precisa ser um Object, por isso o new Character()
		  }
		  
		  p1.push(" "); // Coloco o espaço de volta. ( Realmente não vi outro jeito de fazer isso... )
	    }
	    
	    // Agora mostro o resultado.
	    while(!p1.empty())
		  System.out.print(p1.pop());
      }