Olá, pessoal.
Estou aprendendo Java.
Consegui resolver os exercícios 6.35 a 6.39 do livro do Deitel, mas não sei se foi na gambiarra ou se está correto.
Se alguém puder me ajudar, eu agradeço!
/* Exercício 6.35: InstrucaoAssistida.java
6.35 (Instrução assistida por computador) O uso de computadores na educação é chamado instrução assistida por computador (CAI).
Escreva um programa que ajudará um aluno da escola elementar a aprender multiplicação. Utilize um objeto SecureRandom para produzir
dois inteiros positivos de um algarismo. O programa deve então fazer ao usuário uma pergunta, como
6.36 (Instrução auxiliada por computador: reduzindo a fadiga do aluno) Um problema em ambientes CAI é a fadiga do aluno. Isso pode
ser reduzido variando-se as respostas do computador para prender a atenção do aluno. Modifique o programa da Questão 6.35 para que
vários comentários sejam exibidos para cada resposta como mostrado a seguir:
Possibilidades para uma resposta correta:
Muito bom!
Excelente!
Bom trabalho!
Mantenha um bom trabalho!
Possibilidades para uma resposta incorreta:
Não. Por favor, tente de novo.
Errado. Tente mais uma vez.
Não desista!
Não. Continue tentando.
Utilize a geração de números aleatórios para escolher um número de 1 a 4 que será utilizado para selecionar uma de quatro respostas
adequadas a cada resposta correta ou incorreta. Utilize uma instrução switch para emitir as respostas.
6.37 (Instrução auxiliada por computador: monitorando o desempenho do aluno) Sistemas mais sofisticados de instruções auxiliadas
por computador monitoram o desempenho do aluno durante um período de tempo. A decisão sobre um novo tópico frequentemente é
baseada no sucesso do aluno com tópicos prévios. Modifique o programa de Exercício 6.36 para contar o número de respostas corretas e
incorretas digitadas pelo aluno. Depois que o aluno digitar 10 respostas, seu programa deve calcular a porcentagem das que estão corretas.
Se a porcentagem for menor que 75%, exiba “Peça ajuda extra ao seu professor.” e, então, reinicialize o programa para que
outro estudante possa tentá-lo. Se a porcentagem for 75% ou maior, exiba “Parabéns, você está pronto para avançar para
o próximo nível!” e, então, reinicialize o programa para que outro estudante possa tentá-lo.
6.38 (Instrução auxiliada por computador: níveis de dificuldade) As questões 6.35 a 6.37 desenvolveram um programa de instrução
assistida por computador a fim de ajudar a ensinar multiplicação para um aluno do ensino fundamental. Modifique o programa para
permitir que o usuário insira um nível de dificuldade. Em um nível de dificuldade 1, o programa deve utilizar apenas números de um único
dígito nos problemas; em um nível de dificuldade 2, os números com dois dígitos, e assim por diante.
6.39 (Instrução auxiliada por computador: variando os tipos de problema) Modifique o programa da Questão 6.38 a fim de permitir ao
usuário selecionar um tipo de problema de aritmética a ser estudado. Uma opção de 1 significa apenas problemas de adição, 2 significa
apenas problemas de subtração, 3, de multiplicação, 4, de divisão e 5, uma combinação aleatória de problemas de todos esses tipos.
*/
package ch06_Ex06_35_InstrucaoAssistida;
import javax.swing.JOptionPane;
import java.security.SecureRandom;
public class InstrucaoAssistida {
static double acertos = 0;
public static void main(String[] args) {
double tentativas = 10;
int nivelDific = Integer.parseInt(JOptionPane.showInputDialog(null, "Nível de dificuldade (1 = 1 dígito; 2 = 2 dígitos? "));
if (nivelDific == 1)
nivelDific = 9;
else
nivelDific = 19;
int tipo = Integer.parseInt(JOptionPane.showInputDialog(null, "Aritmética. 1 - adição, 2 - substração, 3 - multiplicação, 4 - divisão, 5 - todos"));
for (int counter = 1; counter <= tentativas; counter++) {
switch (tipo)
{
case 1:
adicao(nivelDific);
break;
case 2:
subtracao(nivelDific);
break;
case 3:
multiplicacao(nivelDific);
break;
case 4:
divisao(nivelDific);
break;
case 5:
todos(nivelDific);
break;
}
}
if ( (acertos / tentativas) >= 0.75 ) {
JOptionPane.showMessageDialog(null, String.format("Parabéns, você está pronto para avançar para o próximo nível! Você acertou %.0f%%", (acertos / tentativas) * 100 ));
}
else {
JOptionPane.showMessageDialog(null, String.format("Peça ajuda extra ao seu professor. Você acertou %.0f%%", (acertos / tentativas) * 100 ));
}
}
public static int numAleat(int nivelDific) {
SecureRandom numAlet1 = new SecureRandom();
return numAlet1.nextInt(nivelDific);
}
public static void respostaCorreta() {
switch (numAleat(5))
{
case 0:
JOptionPane.showMessageDialog(null, "Muito bom!");
break;
case 1:
JOptionPane.showMessageDialog(null, "Excelente!");
break;
case 2:
JOptionPane.showMessageDialog(null, "Bom trabalho!");
break;
case 3:
JOptionPane.showMessageDialog(null, "Mantenha um bom trabalho!");
break;
case 4:
JOptionPane.showMessageDialog(null, "Muito bem!");
break;
}
}
public static void respostaErrada() {
switch (numAleat(5))
{
case 0:
JOptionPane.showMessageDialog(null, "Não. Por favor, tente de novo.");
break;
case 1:
JOptionPane.showMessageDialog(null, "Errado. Tente mais uma vez.");
break;
case 2:
JOptionPane.showMessageDialog(null, "Não desista!");
break;
case 3:
JOptionPane.showMessageDialog(null, "Não. Continue tentando.");
break;
case 4:
JOptionPane.showMessageDialog(null, "Errado. Você consegue!");
break;
}
}
public static void adicao(int nivelDific) {
int number1 = numAleat(nivelDific);
int number2 = numAleat(nivelDific);
int resposta = Integer.parseInt(JOptionPane.showInputDialog(null, String.format("Quanto é %d mais %d?", number1, number2)));
if ( (number1 + number2) == resposta ) {
respostaCorreta();
acertos++;
}
else
respostaErrada();
}
public static void subtracao(int nivelDific) {
int number1 = numAleat(nivelDific);
int number2 = numAleat(nivelDific);
int resposta = Integer.parseInt(JOptionPane.showInputDialog(null, String.format("Quanto é %d menos %d?", number1, number2)));
if ( (number1 - number2) == resposta ) {
respostaCorreta();
acertos++;
}
else
respostaErrada();
}
public static void multiplicacao(int nivelDific) {
int number1 = numAleat(nivelDific);
int number2 = numAleat(nivelDific);
int resposta = Integer.parseInt(JOptionPane.showInputDialog(null, String.format("Quanto é %d vezes %d?", number1, number2)));
if ( (number1 * number2) == resposta ) {
respostaCorreta();
acertos++;
}
else
respostaErrada();
}
public static void divisao(int nivelDific) {
int number1 = numAleat(nivelDific);
int number2 = 1 + numAleat(nivelDific);
int resposta = Integer.parseInt(JOptionPane.showInputDialog(null, String.format("Quanto é %d dividido por %d?", number1, number2)));
if ( (number1 / number2) == resposta ) {
respostaCorreta();
acertos++;
}
else
respostaErrada();
}
public static void todos(int nivelDific) {
SecureRandom tipoAlea = new SecureRandom();
int tipo = 1 + tipoAlea.nextInt(4);
switch (tipo)
{
case 1:
adicao(nivelDific);
break;
case 2:
subtracao(nivelDific);
break;
case 3:
multiplicacao(nivelDific);
break;
case 4:
divisao(nivelDific);
break;
}
}
}