Colegas, eu preciso fazer um tabuada que apareça aleatoriamente, e mostre se o usuario acertou ou errou, eu so consigo faze-la pela estrutura do for e pelo o Scaner, ( o usuaria digitando o resultado vai aparecendo).
Alguem pode me ajuda sobre isso? deu pra explica?
Você quer armazenar todos os números digitados pelo usuário pra depois dizer se acertou tudo ou não é isso?
Algo assim?
2x1 = usuario...
2x2 = usuario...
2x3 = usuario...
...
Veja seus acertos:
2x1 = 2 (acertou!)
2x2 = 5 (errou!)
2x3 = 6 (acertou!)
...
Se sim, sabe usar arrays ou listas para armazenar os valores digitados?
Você pode usar uma List de uma classe que cria uma tabuada padrão com o que deve ser calculado e a resposta.
A partir disso você pode usar um random para gerar a tabuada para o usuário de forma aleatória e pegar as respostas dele em uma lista, a partir disso você compara o resultado da lista da tabuada original com a tabuada respondida pelo usuário e exibe o que ele acertou e o que errou.
Estou sem tempo agora, de uma pesquisada e tente escrever algum código.
Se mais tarde você não conseguir faço um exemplo pra você seguir.
é . isso mesmo,=estou tentando fazer aqui , mais não estou conseguindo
int numero1 = obterNumeroAleatorio();
int numero2 = obterNumeroAleatorio();
int resultadoEsperado = numero1 * numero2;
System.out.printf("Digite o resultado da seguinte multiplicação%n %d x %d = ", numero1, numero2);
int respostaUsuario = lerNumeroInteiro();
if (respostaUsuario == resultadoEsperado) {
System.out.printf("Resposta correta!%n");
} else {
System.out.printf("Resposta errada!%n %d x %d = %d", numero1, numero2, resultadoEsperado);
}
vou dar uma pesquisada aqui , porque fugiu da mente a sintaxe , vou da uma estudada aqui
não consegui fazer desse jeito ai staroski,consegui fazer de uma maneira aqui , mas da dando erro ,
1 - não esta colocando os numeros na tela
2 - não esta comparando a resposta do usuario com a respstaEsperada. ele ja da a resposta antes de comparar
private void okActionPerformed(java.awt.event.ActionEvent evt) {
Random rand = new Random();
int numero1 = rand.nextInt(2)+2 ;
int numero2 = rand.nextInt(10)+2 ;
telaDeApresantacao.setText(numero1 +“x”+ numero2);
int resultadoEsperado = numero1 * numero2; //deixar oculto
int respUsuario = Integer.parseInt(respostaUsuario.getText());
if ( respUsuario == resultadoEsperado) {
System.out.printf("Resposta correta!%n");
} else {
System.out.printf("Resposta errada!%n %d x %d = %d", numero1, numero2, resultadoEsperado);
}
}
e depois vou tentar pegar as resposta erradas e mostrar na tela ,
Você não falou que a aplicação precisava ter interface gráfica de usuário.
Vou ser bonzinho, taí:
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
@SuppressWarnings("serial")
public class TelaTabuadaAleatoria extends JFrame {
public static void main(String[] args) {
try {
TelaTabuadaAleatoria janela = new TelaTabuadaAleatoria();
janela.setDefaultCloseOperation(EXIT_ON_CLOSE);
janela.setLocationRelativeTo(null);
janela.setVisible(true);
} catch (Throwable t) {
t.printStackTrace();
}
}
private JLabel jLabelOperacao;
private JTextField jTextFieldResultado;
private int resultadoEsperado;
public TelaTabuadaAleatoria() {
super("Tabuada aleatória");
montarLayout();
gerarNovaOperacao();
}
private void apresentaMensagem(String mensagem) {
JOptionPane.showMessageDialog(this, mensagem, "Aviso", JOptionPane.PLAIN_MESSAGE);
focarCampoResultado();
}
private void conferirResultado() {
String texto = jTextFieldResultado.getText();
if (texto == null || (texto = texto.trim()).isEmpty()) {
apresentaMensagem("Informe o resultado");
return;
}
int resultadoDigitado;
try {
resultadoDigitado = Integer.parseInt(texto);
} catch (NumberFormatException e) {
apresentaMensagem("\"" + texto + "\" não é um número válido!");
return;
}
String mensagem;
if (resultadoDigitado == resultadoEsperado) {
mensagem = "CERTO!\n" + jLabelOperacao.getText() + resultadoDigitado;
} else {
mensagem = "ERRADO!\nVocê digitou " + resultadoDigitado + " mas\n" + jLabelOperacao.getText() + resultadoEsperado;
}
apresentaMensagem(mensagem);
gerarNovaOperacao();
}
private void focarCampoResultado() {
jTextFieldResultado.setText("");
jTextFieldResultado.requestFocus();
}
private void gerarNovaOperacao() {
Random random = new Random();
int numero1 = random.nextInt(10);
int numero2 = random.nextInt(10);
resultadoEsperado = numero1 * numero2;
jLabelOperacao.setText(numero1 + " X " + numero2 + " = ");
focarCampoResultado();
}
private void montarLayout() {
Container painelPrincipal = getContentPane();
painelPrincipal.setLayout(new BorderLayout());
painelPrincipal.add(new JLabel("Operação:"), BorderLayout.NORTH);
jLabelOperacao = new JLabel();
jLabelOperacao.setHorizontalAlignment(SwingConstants.CENTER);
jLabelOperacao.setPreferredSize(new Dimension(150, 30));
Font fonte = jLabelOperacao.getFont();
fonte = fonte.deriveFont(20.0f);
jLabelOperacao.setFont(fonte);
jTextFieldResultado = new JTextField();
jTextFieldResultado.setHorizontalAlignment(SwingConstants.RIGHT);
jTextFieldResultado.setPreferredSize(new Dimension(100, 30));
JPanel painelOperacao = new JPanel(new FlowLayout(FlowLayout.CENTER));
painelOperacao.add(jLabelOperacao);
painelOperacao.add(jTextFieldResultado);
painelPrincipal.add(painelOperacao, BorderLayout.CENTER);
JButton botaoGerar = new JButton("Nova operação");
botaoGerar.addActionListener(event -> gerarNovaOperacao());
JButton botaoConferir = new JButton("Conferir resultado");
botaoConferir.addActionListener(event -> conferirResultado());
JPanel painelBotoes = new JPanel(new FlowLayout(FlowLayout.RIGHT));
painelBotoes.add(botaoGerar);
painelBotoes.add(botaoConferir);
painelPrincipal.add(painelBotoes, BorderLayout.SOUTH);
setSize(480, 240);
}
}