2
respostas

Como fazer um código mais conciso?

É incrível poder analisar o código dos alunos, eu acho que ver erros e soluções diferentes ajuda no nosso aprendizado.

Quando a minha solução abaixo:

import java.util.Random;
import java.util.Scanner;

public class JogoDeAdivinhacao {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        int secretNumber = new Random().nextInt(100);

        System.out.println("Jogo de advinhação.");
        System.out.println("O computador escolheu um número de 1 a 100, descubra qual é este numero.");

        for(int i = 5; i > 0; i--){

            if( i == 1 ) System.out.print("Sua última tentativa!: ");
            else System.out.print(String.format("Digite um número, você tem mais %d tentativas: ", i));

            int attempt = scanner.nextInt();

            if (attempt == secretNumber) {
                System.out.println("Parabéns. Você venceu!");
                System.out.println("O número secreto é: " + secretNumber);
                break;
            }

            if ( i == 1 && attempt != secretNumber) {
                System.out.println("Não foi desta vez, o número secreto é: " + secretNumber);
            }

            if (attempt > secretNumber) System.out.println("O número digitado é maior que o número secreto.");
            else System.out.println("O número digitado é menor que o número secreto.");
        }
    }
}

Preciso saber se há uma forma mais clara e direta de escrever esse código e também se cometi algum erro de boas práticas.

Obrigado.

2 respostas

Olá, meus 2¢ como um colega de estudos é que no início o importante é funcionar.

A melhoria vem com o descobrimento de novas tecnicas, métodos etc. Por isso, sempre faço exercícios com o JavaDoc aberto na janela ao lado ;). Mas mesmo assim, algo sempre passa, confesso que não conhecia esse método nextInt() ;). Sempre gerei números aleatório com Math.random().

Em relação a uma possível outra solução de implementação ao exercício, eu utilizaria while ao invés de for. Como o próprio nome diz, enquanto..., acredito que sirva melhor pra esse contexto. O for utilizo mais para iterar sobre algo.

Com while daria para testar se as tentativas já terminaram e se o jogador acertou, algo como

while((tentativas < 3) && (acertou == false)) {...

Além disso, estruturar if -> else if -> else traria uma melhor legibilidade ao código (na minha opinião), algo como

if palpite > segredo
else if palpite < segredo
else ...

Mas como disse, são só meus 2¢. Parabéns pela solução! ;)

Resolveu? Por favor, marcar como solucionado ✔. Bons estudos! ⌣

Olá Rafael e Luciano!

Acho incrível essa troca que está acontecendo aqui... é por aí mesmo, esse é um dos nossos objetivos. A gente lança o desafio, cada um vai executando de uma forma diferente e com o tempo/prática, vocês mesmos vão enxergando formas de melhorar o próprio código.

E esse "feeling" de quando melhorar, ou deixar mais conciso vem realmente com o avanço do aprendizado! Muito boas as implementações e ideias!

Caso tenham qualquer dúvida ou observação, não deixem de nos avisar por aqui.

Bons estudos! 😄

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!