Boa tarde. Eu criei um programa de tabuada de multiplicação (Exercício 6.35 do Deitel). Porém, quando é impressa a mensagem: “Please ask your instructor for extra help” o controle do programa não volta ao menu de seleção de início da tabuada ou de saída. Ele simplesmente termina (mesmo com o break que eu coloquei após o case 3. Gostaria de saber como consertar o código a fim de que eu possa voltar ao menu principal após a impressão da mensagem citada.
Tenho percebido que aninhar um switch em outro switch diminui a flexibilidade no que diz respeito à extensibilidade do código mas isso é verdade? é correto afirmar isso?
Obrigado pela ajuda.
package aprendertabuada;
/**
*
* @author Eduardo Felipe
*/
import java.util.Random;
import java.util.Scanner;
public class AprenderTabuadaTest {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
Random randomNumber = new Random();
AprenderTabuada aluno1 = new AprenderTabuada(0,0,0);
int num1, num2, op1, op2, op3;
boolean help;
do {
System.out.printf("%s\n%s\n\n", "(1)Iniciar tabuada", "(2)Sair");
System.out.print("\nInforme a opção desejada: ");
op1 = input.nextInt();
switch(op1){
case 1:
System.out.printf("\n%s\n%s\n%s\n\n",
"(1)Fácil: multiplicação com apenas um algarismo",
"(2)Médio: multiplicação com dois algarismos",
"(3)Difícil: multiplicação com três algarismos");
System.out.print("Escolha o nível de dificuldade: ");
op2 = input.nextInt();
switch(op2){
case 1:
num1 = 1 + randomNumber.nextInt(9);
num2 = 1 + randomNumber.nextInt(9);
do {
aluno1.Tabuada(num1, num2);
help = aluno1.porcAcertos();
if(help)
break;
System.out.print
("\nDigite -1 para sair ou qualquer outro número para continuar: ");
op3 = input.nextInt();
} while(op3 != -1);
break;
case 2:
num1 = 10 + randomNumber.nextInt(90);
num2 = 10 + randomNumber.nextInt(90);
do {
aluno1.Tabuada(num1, num2);
help = aluno1.porcAcertos();
if(help)
break;
System.out.print
("\nDigite -1 para sair ou qualquer outro número para continuar: ");
op3 = input.nextInt();
} while(op3 != -1);
break;
case 3:
num1 = 100 + randomNumber.nextInt(900);
num2 = 100 + randomNumber.nextInt(900);
do {
aluno1.Tabuada(num1, num2);
help = aluno1.porcAcertos();
if(help)
break;
System.out.print
("\nDigite -1 para sair ou qualquer outro número para continuar: ");
op3 = input.nextInt();
} while(op3 != -1);
break;
default:
System.out.print("\nInsira apenas uma das opções válidas\n");
}
case 2:
/*esta instrução é executada após a execução da instrução da linha 64. Só que eu preciso
que isto não ocorra para que o controle do programa volte ao menu principal */
System.exit(0);
default:
// e infelizmente este default também acaba sendo executado após o break do if(help) ser executado.
System.out.println("\nInforme opções válidas\n");
}
} while(op1 != 2);
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package aprendertabuada;
/**
*
* @author Eduardo Felipe
*/
import java.util.Scanner;
import java.util.Random;
public class AprenderTabuada {
private int nacertos, nerros, nresp;
public AprenderTabuada(int nacertos, int nerros, int nresp)
{
this.nacertos = nacertos;
this.nerros = nerros;
this.nresp = nresp;
}
public void Tabuada(int num1, int num2){
Scanner input = new Scanner(System.in);
Random randomNumber = new Random();
int acerta = 1 + randomNumber.nextInt(4);
int resp;
do {
int erra = 1 + randomNumber.nextInt(4);
System.out.printf("How much is %d times %d? ", num1, num2);
resp = input.nextInt();
if(resp == num1 * num2)
switch(acerta){
case 1:
System.out.println("Very good!");
++nacertos;
++nresp;
break;
case 2:
System.out.println("Excellent!");
++nacertos;
++nresp;
break;
case 3:
System.out.println("Nice work!");
++nacertos;
++nresp;
break;
case 4:
System.out.println("Keep up the good work!");
++nacertos;
++nresp;
break;
}
else
switch(erra){
case 1:
System.out.println("No. Please try again.");
++nerros;
++nresp;
break;
case 2:
System.out.println("Wrong. Try once more.");
++nerros;
++nresp;
break;
case 3:
System.out.println("Don't give up!");
++nerros;
++nresp;
break;
case 4:
System.out.println("No. Keep trying.");
++nerros;
++nresp;
break;
}
if(nresp == 10 && nacertos < nerros)
break;
} while(resp != num1 * num2);
}
public boolean porcAcertos(){
float porcacertos = 0;
porcacertos = (float) (nacertos * 0.1);
if(porcacertos < 0.7)
System.out.print("\nPlease ask your instructor for extra help\n\n");
return true;
}
}
mas não tem problema, eu tentarei reescrever a minha classe que contém o método Tabuada. Obrigado mais uma vez.