Executando verificação de segurança...
3

Olhei muito por cima e não sou programador de Java no dia-a-dia, mas posso dizer que está acima da média de quem está iniciando e não tem muitas coisas para melhorar neste exemplo. E o mais legal é que está fazendo o certo, começando pelo começo, tem gente que acha que vai aprender programar de verdade já fazendo algo complexo.

Entendo que os comentários são para efeitos didáticos, mas eles não são úteis de fato em código real, comente a fonte de onde achou a fórmula em vez de dizer algo que o nome da variável já diz. Comentários em código real devem dizer o porquê e não o que faz, o código bem feito já diz o que faz. Em alguns casos para ficar mais descritivo seria interessante criar uma função, mas acho exagero para este caso, acabaria complicando o código sem necessidade ou ganho expressivo, então toda regra depende de contexto, quem falar que nunca pode usar comentário só descritivo está errado. Esse é um aprendizado mais importante que muita coisa que fará em código.

Por que misturou println() com printf()? Não tem nada errado, mas o segundo costuma ser mais eficiente (este caso tão simples nem sei se realmente é, não conheço as otimizações que o Java faz), então porque não usar?

Outro ponto que poderia deixar mais eficiente, embora pouco importa para este exemplo, é só para aprender para o futuro, fazer um toUpperCase() é ineficiente, você pode comparar o texto ignorando a sensibilidade de caixa (case sensitive). Consegue pessquisar e ver como melhorar isso?

Em vez do switch poderia usar só matemática para chegar no fator necessário, resolver em uma linha. Ainda precisaria de um if para lidar com opção inválida.

Este trecho tem um duplicação de código, não é o fim do mundo, mas dá para fazer melhor. Consegue? Veja o outro while, você fez melhor.

    String sexo = scanner.nextLine().toUpperCase();

    while (!sexo.equals("F") && !sexo.equals("M")) {
        System.out.print("Sexo inválido! Digite novamente (M/F): ");
        sexo = scanner.nextLine().toUpperCase();
    }

Pode ser preciosismo, mas em sistema real todas as njtradas de dados deveriam ser validadas. Pense nisso como uma melhoria para melhorar os reuisitos, algo que pode ser mais importante que codificar.

Você sabe que os parênteses não são necessários na multiplicação? Não estou falando para tirar, mesmo sendo redundantes, deixa mais legível mesmo.

Você entende que double não trabalha com números exatos? Este caso eu acho que números exatos não são necessários, então está tudo bem, e números exatos em Java são ineficientes demais, então até que alguma versão mude isso, o ideal é só usar quando realmente é necessário.

Já fez um teste digitando absurdos como entrada? Letras, valores muito grandes, negativos, só dar enter, etc.?

S2


Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente (não vendo nada, é retribuição na minha aposentadoria) (links aqui no perfil também).

Carregando publicação patrocinada...
1