Programa para ensinar aluno do ensino fundamental à aprender multiplicação. [RESOLVIDO]

15 respostas
hackum

Estou desenvolvendo um programa simples para ensinar o aluno à aprender multiplicação. Vejamos o código:

//exApp4.java
//Programa para ensinar um estudando do ensino fundamental à aprender multiplicação

import java.util.Random;
public class exApp4 {
	
	Random randomNumbers = new Random();
	private int die1;
	private int die2;
    
	//método para fazer a pergunta ao usuário
	public void tech()
	{
		randomNumbers(); //chama o método para gerar números aleatórios para fazer a multiplicação.
		System.out.printf("How much is %d times %d ?\n",die1,die2);
		
	}
	//método para gerar números aleatórios
	public void randomNumbers()
	{
		die1 = 1 + randomNumbers.nextInt(10);
		die2 = 1 + randomNumbers.nextInt(10);
		
	}
	
	


}

Utilizei um objeto random para trocar os números da seguinte forma: O usuário digita a resposta, caso estiver correta, perguntar novamente. Senão, fica fazendo a mesma pergunta repetidamente.
A questão, é como vou saber se o usuário digitou a resposta correta, sendo que os números são aleatórios ?

Aguardo resposta…

Obrigado!

15 Respostas

Kanin_Dragon

Jovem,

Você deve armazenar o numero aleatorio em uma variavel auxiliar. Depois é só comparar o valor digitado pelo usuário com o da variavel.

abs,

L

Simples… depois que usuário informar a resposta, vc pega o que ele digitou e transforma num inteiro… depois faz um método corrige. O Método retorna true se a resposta estiver correta ou false se estiver errado…daí conforme o retorno do método vc repete a questão ou chama o seu random denovo para gerar novos números

public boolean corrige(int resposta){
       if ((die1*die2) == resposta)
           return true;
       else 
      return false;

}
brunorota

No caso nem precisa armazenar os números aleatórios em uma variável auxiliar, pq vc já está salvando os numeros nas variaveis die1 e die2

No caso você só precisa comparar o número digitado pelo usuário com a multiplicação das variáveis die1 x die2

Ficaria mais ou menos assim

int respostaAluno = Dados do teclado;

if(respostaAluno == (die1 * die2)){

System.out.println("RESPOSTA CORRETA");
}else{

System.out.println("RESPOSTA ERRADA");

}

É isso ae

Valew

hackum

Olá,

Consigui fazer o programa com a ajuda de vocês, é simples, mas funcional. Obrigado mais uma vez a todos do GUJ, sem exceção.

Vejamos o código:

//exApp4.java
//Programa para ensinar um estudando do ensino fundamental à aprender multiplicação

import java.util.Random;
import java.util.Scanner;
public class exApp4 {
	
	Random randomNumbers = new Random();
	Scanner input = new Scanner(System.in);
	
	private int die1;
	private int die2;
    private int reply;
	
	//método para fazer a pergunta ao usuário
	public void tech()
	{
		randomNumbers(); //chama o método para gerar números aleatórios para fazer a multiplicação.
		System.out.printf("How much is %d times %d ?\n",die1,die2);
		reply = input.nextInt();
		correct();
	}
	
	public void correct()
	{
		if(reply == (die1 * die2))
		{
			System.out.print("Very Good!");
		}else
			System.out.print("No. Please try again.");
		
	}
	//método para gerar números aleatórios
	public void randomNumbers()
	{
		die1 = 1 + randomNumbers.nextInt(10);
		die2 = 1 + randomNumbers.nextInt(10);
		
	}
	
	


}

No caso, se o usuário responder a resposta errada, ele pergunta novamente fazendo a mesma, mas está sendo números aleatórios. Nesse caso, o que eu faço ?

Obrigado mais uma vez…

kenneth

Fala brow,

Chama randomNumbers() no construtor, e quando o cara acertar.

PS: Ta nos esteites brow? Se for ensinar multiplicacao pra criancada em ingles, vao ficar meio perdidos
(Isso se for pra criancas =])

Abraco;

hackum

Não consigui compreender.
Poderia ser mais claro ?
Abraço!

kenneth
//exApp4.java
//Programa para ensinar um estudando do ensino fundamental à aprender multiplicação

import java.util.Random;
import java.util.Scanner;
public class exApp4 {

	Random randomNumbers = new Random();
	Scanner input = new Scanner(System.in);
	
	private int die1;
	private int die2;
       private int reply;
	
        // [KENNETH] Esse eh o construtor, vai ser chamado qdo vc instanciar este objeto.
        // vai funcionar como uma inicializacao...
        public exApp4 {               
               randomNumbers();
        }	

	//método para fazer a pergunta ao usuário
	public void tech()
	{
		// [KENNETH]  Pus em comentario, pra que permanecam os mesmo nros ate o cara acertar.
                // randomNumbers(); //chama o método para gerar números aleatórios para fazer a multiplicação.
		System.out.printf("How much is %d times %d ?\n",die1,die2);
		reply = input.nextInt();
		correct();
	}
	
	public void correct()
	{
		if(reply == (die1 * die2))
		{
			System.out.print("Very Good!");
                        //[KENNETH]  Agora, o cara acertou, chamamos para gerar dois novos numeros...
                        randomNumbers();
		}else
			System.out.print("No. Please try again.");
		
	}
	//método para gerar números aleatórios
	public void randomNumbers()
	{
		die1 = 1 + randomNumbers.nextInt(10);
		die2 = 1 + randomNumbers.nextInt(10);
		
	}
}

Se eu entendi o que voce quer, acho que funciona.

Abraco.
:smiley:

hackum

Fala Kenneth!

Isso eu já sei. Mas, não é essa a dúvida.
Veja bem, se o usuário errou a multiplicação, ex: 2 x 4, perguntar novamente a mesma pergunta, 2 x 4.

Abraços!

kenneth

Pelo que voce falou acima, pareceu que tinha conseguido fazer isso.

Bom, voce vai precisar de um laco.
Algo como

sorteia();
enquanto <alguma condicao>:
     leNumerosUsuario();
     se acertou
          print "parabens";
          sorteia();
     senao print "tente novamente";
fim-enquanto;

Abraco.

hackum

No caso, se o usuário errar a conta proposta pra ele, deve retornar dizendo a mesma pergunta que ele errou, até acertar.

Com o while é possível, certo ?

kenneth

Aham
:smiley:

hackum
public void correct()
	{
		while(reply == (die1 * die2))
		{
			if(reply == (die1 * die2))
				{
				  System.out.print("Very good!");
				}else{
					System.out.print("No. Please try again.");
					
		}
			reply++;
	}

Veja… quando digito errado, ele não pergunta novamente. O que há ?

kenneth

Fala brow,

Do jeito que esta, voce nao pergunta nem quando erra, nem quando acerta.
Nao esta lendo a entrada do usuario. Isso eh feito por esta linha:

reply = input.nextInt();

E corrija seu while, pois so entrara se o cara acertar.

Abraco.

N
//exApp4.java
//Programa para ensinar um estudando do ensino fundamental à aprender multiplicação

import java.util.Random;
import java.util.Scanner;
public class exApp4 {

	Random randomNumbers = new Random();
	Scanner input = new Scanner(System.in);
	
	private int die1;
	private int die2;
       private int reply;
	
        // [KENNETH] Esse eh o construtor, vai ser chamado qdo vc instanciar este objeto.
        // vai funcionar como uma inicializacao...
        public exApp4 {      
               randomNumbers(); //chama o método para gerar números aleatórios para fazer a multiplicação.         
               tech();
        }	

	//método para fazer a pergunta ao usuário
	public void tech()
	{                
		System.out.printf("How much is %d times %d ?\n",die1,die2);
		reply = input.nextInt();
		correct();
	}
	
	public void correct()
	{
		if(reply == (die1 * die2))
		{
			System.out.print("Very Good!");
                        //[KENNETH]  Agora, o cara acertou, chamamos para gerar dois novos numeros...
                        randomNumbers();
                        tech(); //Começa tudo denovo mas sorteando novos números
		}else
			System.out.print("No. Please try again.");
                        tech(); //Começa denovo com os números atuais
		
	}

	//método para gerar números aleatórios
	public void randomNumbers()
	{
		die1 = 1 + randomNumbers.nextInt(10);
		die2 = 1 + randomNumbers.nextInt(10);
		
	}
}

Fiz umas adaptações e testei aqui está funcionando conforme você queria, porém não há uma parada, então você deve definir um critério para parada tipo, quantidade de erros ou acertos.

hackum

Obrigado a todos!

Criado 10 de maio de 2011
Ultima resposta 11 de mai. de 2011
Respostas 15
Participantes 6