Como EU faria:
Passo 1 - Ao invés de usar System.out.println()
, colocaria isso tudo em uma função que retorna int (pontuação)
Passo 2 - Escreveria testes unitários usando a biblioteca JUnit do Java para ter certeza que o comportamento dessa função está de acordo com o que eu espero (incluindo cenários alternativos)
Passo 3 - Começaria a refatorar começando pelos statements de dentro do if.
Por exemplo: letras[i] == 'Q' || letras[i] == 'Z'
o que a letra Q
e Z
tem em comum? Você consegue ver que esse padrão(isso || aquilo
) se repete muito?
Tente procurar padrões no que você tem e refatore métodos para isso.
Dica: Se apoie nos testes unitários do Passo 2 para garantir que tudo continua funcionando
Passo 3 - Depois eu partiria para limpar esses if/else if.
essencialmente no final gostaria de ter um método mais ou menos assim:
public static void main(String[] args) {
String palavra = "teste";
String palavraUpper = palavra.toUpperCase();
char[] letras = palavraUpper.toCharArray();
int pontuação = getPontuacaoDasLetras(letras)
}
public static int getPontuacaoDasLetras(char[] letras) {
int pontuacao = 0;
for (int i = 0; i < letras.length; i++) {
pontuacao += getPontuacaoDaLetra(letras[i]);
}
return pontuacao;
}
getPontuacaoDaLetra()
poderia ser um simples método que olha um mapa hardcoded.
sendo assim mapa['A']
retornaria int 2
e assim por diante.
Só precisaria mapear todas as letras e a pontuação correspondente