Gostaria da ajuda de vocês para fazer uma refatoração em código. Só para constar isso não é nenhum trabalho de faculdade ou alguma coisa parecido, só quero ajuda para a refatoração que fiz e não estou gostando.
Situação:
Tenho um texto e tenho que mostrar a maior palavra do texto. Caso existam palavras(as maiores) que tenham tamanhos iguais, deve ser mostrado essas palavras.
Código que fiz:
Stringtext="esse texto tem varias strins que são analisadas ";String[]list=text.split(" ");ArrayList<String>listFinal=newArrayList<String>();intmaior=0;for(inti=0;i<list.length;i++){if(list[i].length()>=maior){maior=list[i].length();}}for(inti=0;i<list.length;i++){if(list[i].length()==maior){listFinal.add(list[i]);}}for(Stringword:listFinal){System.out.println(word);}
Stringtexto="Este texto tem varias palavras que são analisadas ou comparadas";String[]palavras=texto.trim().split(" ");if(palavras.length>0){List<String>palavrasMaiores=newArrayList<String>();palavrasMaiores.add(palavras[0]);inttamanhoDaMaiorPalavra=palavras[0].length();for(inti=1;i<palavras.length;i++){StringpalavraCorrente=palavras[i];intdiferencaDeTamanho=palavraCorrente.length()-tamanhoDaMaiorPalavra;if(diferencaDeTamanho>0){palavrasMaiores.clear();tamanhoDaMaiorPalavra=palavraCorrente.length();}if(diferencaDeTamanho>=0){palavrasMaiores.add(palavraCorrente);}}for(Stringpalavra:palavrasMaiores){System.out.println(palavra);}}
As variáveis temporárias palavraCorrente e tamanhoDaMaiorPalavra são desnecessárias, mas usei para deixar mais claro o algoritmo.
R
RafaelViana
Que tal assim? Aumenta um pouco as linhas, mas ganha-se clareza no código (na minha opinião):
publicstaticvoidmain(String[]args){Stringtexto="esse texto tem varias strins que são analisadas ";String[]palavras=texto.split(" ");intmaior=acharTamanhoMaiorPalavra(palavras);for(Stringpalavra:palavras){if(palavra.length()==maior)System.out.println(palavra);}}privatestaticintacharTamanhoMaiorPalavra(String[]palavras){intmaior=0;for(Stringpalavra:palavras){if(palavra.length()>maior)maior=palavra.length();}returnmaior;}
A
andreymb
Também acho que ficou melhor assim, já que a necessidade é apenas imprimir na tela os strings maiores.
R
RafaelViana
andreymb:
Também acho que ficou melhor assim, já que a necessidade é apenas imprimir na tela os strings maiores.
Se precise guardar a lista também não seria dificil :D
A diferença é que você já inclui a primeira palavra na lista, e se acha uma maior remove e começa a incluir de novo. A lógica fica mais fácil se você primeiro acha o maior tamanho.
O seu algoritmo percorre a lista apenas uma vez. O meu duas vezes.
A
andreymb
Exatamente, a lista é percorrida uma vez apenas. Mas eu ainda ficaria com este seu que é mais legível e usaria o que eu fiz só se surgisse necessidade de otimização.
alanmateus
Olá…
Queria agradecer as respostas de vocês…
Gostei de todas as ajudas oferecidas e gostei do código que o RafaelViana fez.
Ficou fácil de entender.