dúvidas extressantes

6 respostas
M

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

a saída está assim:

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

6 Respostas

peczenyj

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

Zeed01

Boa noite colegas !

O que é “Metodos” ?

[]s

ViniGodoy

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.

rdantas

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

thegoergen

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

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());
      }
Criado 31 de março de 2008
Ultima resposta 1 de abr. de 2008
Respostas 6
Participantes 6