Pessoa, esse é o código:
import java.util.*;
public class Multi {
private int i, valorR, num1, num2, multiplicacao;
int erro = 0;
boolean valorL;
public Multi(){
}
Random randomNumber = new Random();
Scanner input = new Scanner(System.in);
public void getNum1(){
num1 = randomNumber.nextInt(10);
}
public void getNum2(){
num2 = randomNumber.nextInt(10);
}
public void multiplicacao(){
valorR= num1 * num2;
}
public void frase(){
if(valorL == true){
switch (randomNumber.nextInt(4)){
case 0:
System.out.println("Parabéns");
break;
case 1:
System.out.println("Ótimo");
break;
case 2:
System.out.println("Continue assim");
break;
case 3:
System.out.println("Muito bom");
break;
}
}else{
erro++;
switch (randomNumber.nextInt(4)){
case 0:
System.out.println("Tente Novamente");
break;
case 1:
System.out.println("Não desanime");
break;
case 2:
System.out.println("Você consegue");
break;
case 3:
System.out.println("Quase lá");
break;
}
}
}
public void multiplicar(){
for(i=0;i<10;i++){
getNum1();
getNum2();
multiplicacao();
System.out.printf("Digite o resultado de %d x %d: %d", num1,num2, valorR);
multiplicacao = input.nextInt();
while (multiplicacao != valorR){
i++;
for(;i<10;i++){
valorL= false;
frase();
System.out.printf("Digite o resultado de %d x %d: %d\n", num1,num2, valorR);
multiplicacao = input.nextInt();
if(multiplicacao == valorR){
break;
}
}
break;
}
if(multiplicacao == valorR){
valorL = true;
frase();
}
}
System.out.printf("erro: %d\n", erro);
}
public void condicao(){
int resp =0;
while (resp != -999){
erro=0;
multiplicar();
System.out.println("Para sair do programa digite '-999':");
resp = input.nextInt();
}
}
}
outra classe:
public class MultiTest {
public static void main(String[] args) {
Multi multi = new Multi();
multi.condicao();
}
}
Agradeço a todos desde já
public void multiplicar(){
for(i=0; i<10; i++){
getNum1();
getNum2();
multiplicacao();
System.out.printf("Digite o resultado de %d x %d: %d", num1,num2, valorR);
multiplicacao = input.nextInt();
while(multiplicacao != valorR){
//Usuario digitou errado.
valorL= false;
frase();
i++;
for(; i<10; i++){
/**
* Retirei a chamada ao metodo 'frase()', pois ja foi chamado.
*/
// frase();
System.out.println("-----\nContador:" + i);
System.out.println("Erros:" + this.erro);
System.out.printf("Digite o resultado de %d x %d: %d\n", num1,num2, valorR);
multiplicacao = input.nextInt();
if(multiplicacao == valorR){
break;
}//Fim do if.
//Usuario digitou errado.
valorL= false;
frase();
}//Fim do for.
break;
}//Fim do while.
if(multiplicacao == valorR){
valorL = true;
frase();
}
}//Fim do for.
System.out.printf("erro: %d\n", erro);
}//Fim do metodo multiplicar.
Mas vc não colocou o que o código deveria fazer e o que está dando errado. Assim fica difícil de te ajudar. Diga o que vc queria que o código fizesse e o que ele está fazendo de errado…
O problema está no método multiplicar.
Não consegui entender porque você colocou dois for, pois os dois blocos fazem exatamente a mesma coisa, e o contador dos dois é o mesmo, sendo que no for interno o valor do contador não é reinicializado, nem sofre alterações significativas. Só teria sentido o for interno se houvesse alguma manipulação diferenciada em relação ao for externo, o que não há.[i]
O problema ocorre porque se o contador extrapolar já no bloco [/i]for externo, isso significa que não entrará no for[i] interno, o qual é responsável por chamar o método frase() (que acrescenta um ao erro). Então digamos que o usuário erre o resultado quando o contador tiver o valor 9 (10 menos 1). Então o contador será acrescido em 1. Mas como já atingiu o valor máximo aceito pelo for interno, então não entrará nele, e o método multiplicar terminará. Ou seja, houve um erro, mas não foi acrescido na variável erro, pois o método frase() não foi chamado.
Uma dica:
Não economize comentários quando estiver digitando o seu código. Esses vão ajudar você e outras pessoas a entender o que está fazendo, além de serem muito úteis na hora de depurar.
Complementando a dica do Eder,
Dê nomes significativos a atributos ou métodos. Vc fez isso com a variável mltiplicação, aí o pessoal já entendeu, sem ver o que seu código faz com a variável, para que ele servirá, boa prática essa que vc nao repetiu nas outras variaveis num1 e num2 etc. Além do pessoal nao entender, poder crer que se vc mesmo pegar seu código daqui uns meses, nem mesmo vc vai saber pra que as variaveis com nomes nao significativos servem. Isso já aconteceu comigo, com meus primeiros programas em C.
Outra coisa sao os métodos grandes. Se um método está grande, é porque ele possui varias responsabilidades e isso nao é bom. Quebre um método grande em varios pequenos, e se vc der nomes significativos aos mesmos, nem vai precisar colocar muitos comentários no seu código…
Muito obrigado pelas dicas, pessoal.
Eu resolvi o problema contando as respostas positivas e posteriormente subitraindo 10 do nº de acertos.
Em relação ao for dentro do outro é apenas para repetir a mesma pergunta caso esteja errada.
Estive assimilando as dicas e utilizarei nos programas futuros
Valeu pessoal