Palavras equilibradas em java

Swat

Banido
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:
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 ;).
 
S0ul disse:
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 ;).

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!
 
Back
Topo