GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Problema com números aleatórios. java

java
Tags: #<Tag:0x00007f1860a558a0>

#1

opa pessoal, alguém aí poderia me ajudar com o meu código.
o programa, sorteia dois números aleatórios, e o usuário deve entrar com o produto desses números. De acordo com a resposta, ele imprimirá algumas mensagens(cada case dos switchs).
O problema é que aleatoriamente o programa imprimi essas mensagens, e aleatoriamente não, o que pode ser???

import java.security.SecureRandom;
import java.util.Scanner;

public class Testes {

public static void main(String[] args) {

	Scanner sc = new Scanner(System.in);
	
	multi();
	sc.close();
}
public static void multi() {
	
	Scanner sc = new Scanner(System.in);
	SecureRandom random = new SecureRandom();
	
	int produto = 0, resposta = 0, acertos = 0, erros = 0;	
	int count = 1;		
	int nivel = 0, num1 = 0, num2 = 0;
	
	System.out.println("\t\t\tEscolha o nível das questoes.\n1 para iniciantes. 2 para intermediarios e se vc for foda. 3 para avançados.");
	System.out.println("\nNivel: ");
	nivel = sc.nextInt();
	
	do {
		switch(nivel) {
		case 1:
			num1 = random.nextInt(10);
			num2 = random.nextInt(10);
			break;
		case 2:
			num1 = random.nextInt(100);
			num2 = random.nextInt(100);
			break;
		case 3:
			num1 = random.nextInt(1000);
			num2 = random.nextInt(1000);
			break;
		
		}
		produto = num1 * num2;
		
		System.out.printf("\nQuanto e %d x %d: ", num1, num2);
		resposta = sc.nextInt();
		
		if(resposta == produto) {
			int mensagem1 = 1 + random.nextInt(5);
			switch(mensagem1) {
			case 1:
				System.out.println("Muito bom.");
				break;
			case 2:
				System.out.println("Excelente.");
				break;
			case 3: 
				System.out.println("Bom trabalho.");
				break;
			case 4: 
				System.out.println("Mantenha um bom trabalho!");
				break;
			}
			acertos++;
		}
		else {
			int mensagem2 = 1 + random.nextInt(5);
			
			switch(mensagem2) {
			case 1:
				System.out.println("Não. Por favor, tente de novo.");
				break;
			case 2:
				System.out.println("Errado. Tente mais uma vez.");
				break;
			case 3: 
				System.out.println("Não desista!");
				break;
			case 4: 
				System.out.println("Não. Continue tentando.");
				break;
			}
			
			erros++;	
		}		
		count++;
	}while(count <= 10);
	
	int A = acertos * 10;
	int B = erros * 10;
	System.out.println("Respostas corretas: " + acertos);
	System.out.println("Respostas incorretas: " + erros);
	
	
	if(A >= 75)
		System.out.println("\nParabéns, você está pronto para avançar para o próximo nível!");
	else
		System.out.println("\nPeça ajuda extra ao seu professor.");
	 sc.close();		
}

}


#2

Você tem valores de case de 1 a 4, e sua variável mensagem esta recebendo valores de 1 a 6.
Ou seja quando sua variavel mensagem1 receber valores 5 ou 6 você não possui condição no seu case para eles, logo seu código não exibirá nada.


#3

Na verdade as variáveis mensagem1 e mensagem2 estão recebendo valores entre 1 e 5.
O parâmetro bound do método nextInt(int) é exclusivo, então no caso do nextInt(5) vai gerar um número entre 0 e 4, como ele soma 1 ao número gerado, o sorteio atribuído às variáveis será entre 1 e 5.
Então só falta a tratativa para do case 5 no código.


#4

mas o parâmetro 5 não indica que os números serão de 0 a 4?? e adicionando 1 o intervalo não seria de 1 a 4??


#5

valeu, coloquei 4 como parâmetro e deu certo aqui, muito obrigado.


#6

Sim

Ele está adicionando 1 ao resultado do nextInt, não ao parâmetro.
Sorteou 0 então 1 + 0 = 1
Sorteou 1 então 1 + 1 = 2
Sorteou 2 então 1 + 2 = 3
Sorteou 3 então 1 + 3 = 4
Sorteou 4 então 1 + 4 = 5