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?
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());
}