Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Resolução 0313

Olá, pessoal! Segue no link minha resolução: https://github.com/mfagundesleal/curso-java-alura/blob/f32905a81862056d442b4ac2d4fae123aecc09c1/java-primeira-aplicacao-desafio-0313.md (não consigo colocar em texto puro por causa da limitação de caracteres).

2 respostas
solução!

Oii, Michel.

Você demonstrou uma excelente organização ao separar cada exercício em uma classe diferente e criar um arquivo Main.java para gerenciar a execução de todos eles. Isso mostra que você já está aplicando conceitos importantes de modularização, o que facilita muito a manutenção do código.

Destaquei os pontos fortes do seu código e algumas sugestões de melhoria para aprimorar sua lógica de programação.

Pontos fortes

  1. Organização do projeto: A estrutura de arquivos separada mantém o código limpo e fácil de entender.
  2. Uso de text blocks: No arquivo MenuOpcoes.java, você utilizou as três aspas (""") para textos longos. Essa é uma funcionalidade do Java que deixa a formatação de menus muito mais legível.
  3. Interação com o usuário: As mensagens de entrada e saída estão claras, orientando bem quem está usando o programa.

Sugestões de melhoria

Analisei seu código e encontrei três pontos onde podemos fazer ajustes para evitar erros de lógica e melhorar a performance.

1. Lógica de comparação (SemelhancaNumeros.java)

Existe um comportamento inesperado no seu código se o usuário digitar dois números iguais (exemplo: 5 e 5).

  • O que acontece hoje: O código verifica se são iguais e imprime "Os números são iguais". Logo em seguida, ele entra no segundo bloco if/else. Como 5 > 5 é falso, ele cai no else e imprime "O segundo número é maior do que o primeiro".
  • Resultado na tela: O usuário vê duas mensagens contraditórias.
  • Correção: Devemos encadear as condições usando else if. Dessa forma, apenas uma das opções será executada.
if (numero1 == numero2) {
    System.out.println("Os números são iguais");
} else if (numero1 > numero2) {
    System.out.println("O primeiro número é maior");
} else {
    System.out.println("O segundo número é maior");
}

2. Simplificação do fatorial (Fatorial.java)

Sua lógica funciona, mas é um pouco complexa devido à verificação if(resultadoFatorial == 0) dentro do loop.

Podemos inicializar a variável com 1 (elemento neutro da multiplicação) e apenas multiplicar sequencialmente:

int fatorial = 1;

// O loop calcula: 1 * 1 * 2 * 3 ... até o número desejado
for (int i = 1; i <= numero; i++) {
    fatorial *= i;
}

3. Chamada de métodos estáticos (Main.java)

No seu arquivo principal, você instanciou as classes (criou objetos com new) para chamar o método main().

Como você declarou esses métodos como public static void main(), eles pertencem à classe e não precisam de um objeto para serem usados. Isso economiza memória e é a forma padrão de acessar métodos estáticos em Java.

  • Como está:
Fatorial fatorial = new Fatorial();
fatorial.main();
  • Como pode ficar:
Fatorial.main();
MenuOpcoes.main();
// E assim por diante...

Você construiu uma base muito sólida. Os ajustes sugeridos acima são naturais no processo de aprendizado e servem para refinar sua lógica.

Recomendo que você tente aplicar a correção no arquivo SemelhancaNumeros.java primeiro, pois isso corrige um erro de lógica que afeta o resultado final para o usuário.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Toooop, muito obrigado pelo auxílio!

O erro de lógica no SemelhancaNumeros.java foi devido à interpretação errada da regra, havia entendido que devia checar se era igual e retornar e também checar se era maior ou menor, mas agora vi que não faz sentido (se for igual, não é maior nem menor kkk).

O Fatorial.java assumo que foi um pouco desafiante pra mim. Vou colocar em prática a sugestão.

E sobre as classes com método main estático, é algo novo pra mim, obrigado mesmo.