1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Palavras equilibradas em java

Discussão em 'Programação' iniciada por Swat, 20 de Abril de 2009. (Respostas: 3; Visualizações: 1325)

  1. Swat

    Swat I Folded Myself

    Olá pessoal. estou a fazer um trabalho para a cadeira de programação, mas estou encalhado num dos problemas

    O programa é suposto ler uma frase (string) e analisar cada palavra e ver se é equilibrada (uma palavra equilibrada é uma palavra que alterna vogais e consoantes, tal como a palavra banana. a palavra estado nao é equilibrada porque tem duas consoantes consecutivas.)

    Ora o código que eu tenho

    Código:
    import java.util.Scanner;
    public class PalavrasEquilibradas {
    	public static boolean tipoLetra (char letra){
    		return(letra== 'a' ||letra== 'e' ||letra== 'i' ||letra== 'o' ||letra== 'u');
    	}
    	
    	public static boolean Equilibrado (String word){
    		
    		word.toLowerCase();
    		for(int index=0, j=1; index<word.length()&& j<word.length(); index++, j++ ){
    			if (tipoLetra(word.charAt(index))==(tipoLetra(word.charAt(j))))	return false;
    		}
    		return true;
    	}
    	
    	public static void main (String [] args){
    		
    		String frase, fraseFinal="";
    		
    		int i=0, f;
    		Scanner input=new Scanner(System.in);
    		
    		System.out.print ("Insira a frase: ");
    		frase=input.nextLine();
    		while (i<frase.length()){
    			f=frase.indexOf(" ",i);
    			if (f==-1){
    				f=frase.length();
    			}
    			if (Equilibrado(frase.substring(i,f)))fraseFinal=frase.substring(i,f)+" ";
    			i=f+1;
    			System.out.print(fraseFinal);
    		}
    		
    	}
    
    }
    O problema está no output, que repete a primeira palavra equilibrada até encontrar a proxima palavra equilibrada.

    Exemplo:
    <input>
    hoje esta um dia fantastico cheio de sol

    e o <output> desejado seria:
    hoje um de sol

    e o <output> formado por esse codigo é este:
    hoje hoje um um um um de sol

    se me conseguirem ajudar, agradecia imenso ;)
     
    Última edição: 20 de Abril de 2009
  2. S0ul

    S0ul Power Member

    Experimenta fazer este passo :).
    Onde tens:
    Código:
                           if (Equilibrado(frase.substring(i,f)))
                                fraseFinal=frase.substring(i,f)+" ";
                           i=f+1;
                           System.out.print(fraseFinal);
    
    Mete assim:
    Código:
                             if (Equilibrado(frase.substring(i,f))){
                                fraseFinal=frase.substring(i,f)+" ";
                                System.out.print(fraseFinal);
                            }
                             i=f+1;
    
    
    O que acontece é que tens tudo bem até mostrares a frase, e como mostras fora do if, estás a mostrar uma palavra que foi associada antes, não sei se reparaste mas estava a mostrar o número de palavras iguais à frase, foi isto o que suspeitei :), e testei e realmente tem sentido, ou seja, só deves mostrar se encontrar a palavra equilibrada, e tu apenas estavas a associar a variavel à respectiva palavra. Se não houvesse mostravas na mesma e como antes já tinha tido uma associação e agora não, volta a mostrar o valor que antes tinha guardado ;).
     
  3. Swat

    Swat I Folded Myself

    Claro, tem toda a lógica! Estando o System.out.print dentro do ciclo, ele voltava a mostrar a palavra cada vez que o ciclo iniciava de novo, e não apenas quando encontrava a nova palavra.

    bem, isto chega a uma hora q já pouco rendimento dá :D

    Muito obrigado S0ul! Fico-te bastante grato!
     
  4. S0ul

    S0ul Power Member

    Ora essa, o pessoal anda cá para ajudar ;).
     

Partilhar esta Página