Eai galera, sou um iniciante em programação e gostaria de saber se o código que eu programei poderia ser refinado de alguma forma, tanto no código em si, como em organização dos métodos e etc. Gostaria de deixa-lo na forma mais prática possível
O exercício pedia para eu criar um código que dada a entrada de uma dificuldade (sendo 1 números de apenas 1 digito, 2 dois dígitos e assim por diante) e uma entrada de uma operação aritmética (+,-,*,/) o programa fazia 10 perguntas com as especificações escolhidas, caso a resposta estivesse certa ele randomizava uma resposta positiva, caso não randomizava uma resposta negativa. Basicamente é isso, obrigado desde já.
public class InstrAux {
private int contador = 0; private int acerto = 0; private int dificuldade; private char temp; private double correto; private double resposta;
Scanner input =
new Scanner(System.in);
Random r =new Random();
public void lerProblema() { System.out.println(“Digite o nível de dificuldade:”); dificuldade = input.nextInt(); System.out.println(“Escolha sua operação [+ - * /] ou [=] para fazer uma equação:”); temp = input.next().charAt(0); gerarNumeros();
}
public void gerarNumeros() { if (contador == 10) { avaliarNota(); } int n1 = r.nextInt((int) Math.pow(10, dificuldade) - (int) Math.pow(10, dificuldade - 1) + 1) + (int) Math.pow(10, dificuldade - 1) - 1; int n2 = r.nextInt((int) Math.pow(10, dificuldade) - (int) Math.pow(10, dificuldade - 1) + 1) + (int) Math.pow(10, dificuldade - 1) - 1; lerNumeros(n1, n2); }
public void lerNumeros(int n1, int n2) {
if (temp == '=') { System.out.printf("Quanto é (2 * %d) + (3 - %d) * (%d * %d)\n", n1, n2, n1, n2); resposta = input.nextInt(); compararNumeros(n1, n2, resposta); } else { if (temp == '/' && n2 == 0) { n2++; System.out.println("Quanto é " + n1 + temp + n2 + " (Apenas use 2 casas decimais)"); resposta = input.nextDouble(); compararNumeros(n1, n2, resposta); } else { System.out.println("Quanto é " + n1 + temp + n2 + " (Apenas use 2 casas decimais)"); resposta = input.nextDouble(); compararNumeros(n1, n2, resposta); } }
}
public void compararNumeros(int n1, int n2, double resposta) {
String[] answer = new String[8]; answer[0] = "Very good!"; answer[1] = "Excellent!"; answer[2] = "Nice work!"; answer[3] = "Keep up the good work!"; answer[4] = "No. Please try again"; answer[5] = "Wrong. Try once more"; answer[6] = "Don't give up"; answer[7] = "No. Keep trying"; switch (temp) {
case '+': correto = n1 + n2; break; case '-': correto = n1 - n2; break; case '*': correto = n1 * n2; break; case '/': BigDecimal big1 = new BigDecimal(n1); BigDecimal big2 = new BigDecimal(n2); BigDecimal oi = big1.divide(big2, 2, RoundingMode.HALF_UP); String aha = oi.toString(); correto = Double.parseDouble(aha); break; case '=': correto = (int) (2 * n1) + (3 - n2) * (n1 * n2); break;
} if (correto == resposta) { System.out.println(answer[r.nextInt(4)]); acerto++; contador++; gerarNumeros(); } else { contador++; System.out.println(answer[r.nextInt(4) + 4]); gerarNumeros(); }
}
public void avaliarNota() {
if (acerto > 7) { System.out.println("Parabéns você teve um aproveitamento de: " + (acerto * 10) + "% \nVocê está pronto para avançar para o próximo nível!");
} else { System.out .println("Você teve um aproveitamento de: " + (acerto * 10) + "%\nPeça ajuda para o seu professor");
} acerto = 0; contador = 0; lerProblema();
}
}
Exemplo de saída:
Digite o nível de dificuldade:
1
Escolha sua operação [+ - * /] ou [=] para fazer uma equação:
/
Quanto é 3/1 (Apenas use 2 casas decimais)
3
Very good!
Quanto é 2/6 (Apenas use 2 casas decimais)
0,33
Excellent!
Quanto é 7/8 (Apenas use 2 casas decimais)
0,88
Nice work!
Quanto é 8/7 (Apenas use 2 casas decimais)
1,14
Nice work!
Quanto é 5/7 (Apenas use 2 casas decimais)
0,71
Nice work!
Quanto é 6/3 (Apenas use 2 casas decimais)
2
Nice work!
Quanto é 0/1 (Apenas use 2 casas decimais)
0
Excellent!
Quanto é 5/1 (Apenas use 2 casas decimais)
5
Keep up the good work!
Quanto é 9/1 (Apenas use 2 casas decimais)
9
Excellent!
Quanto é 7/6 (Apenas use 2 casas decimais)
1,17
Keep up the good work!
Parabéns você teve um aproveitamento de: 100%
Você está pronto para avançar para o próximo nível!
Digite o nível de dificuldade: