Jump to content
Psilvestre

Bug:triplo print

Recommended Posts

Psilvestre

Boas, eu quero adicionar uma opção de desistência num pequeno jogo e utilizei um switch para o utilizador escrever S/N dependendo se ele queria jogar outra vês ou não... mas no default, ou seja, se outra letra for escrita o programa imprime três vezes no ecrã uma mensagem que diz : "Lembre-se apenas S/N" e outra "Gostaria de jogar outra vez?(S/N)".

Como eu estou a começar com Java estou com um pouco de um problema em encontrar o problema 😳

Agradecia se pudessem rever o código e ajudar-me...

import java.lang.Math;
import java.util.Scanner;

public class Jogo {
public static void main (String args[])
throws java.io.IOException
{
	Scanner resp = new Scanner (System.in);


	int resposta;
	int tentativas;
	boolean repetir = false;

	do{
		double d = Math.random(); 
		int x = (int) (100*d); 


	System.out.println("Introduza um número (1-100, -1 para desistir):");
    resposta = resp.nextInt();
    tentativas = 0;
    tentativas++;
    boolean check = true;
    
    if(resposta == -1){
    	System.out.println("A resposta era " + x);
    	System.out.println("Gostaria de jogar outra vez?(S/N)");
    	do{
    	char c = (char) System.in.read();
		switch (c){

		case 's':
		case 'S':
			System.out.println("Você respondeu SIM");
			check = false;
			repetir = true;
			break;

		case 'n':
		case 'N':
			System.out.println("Você respondeu NÃO");
			check = false;
			repetir = false;
		break;

		default:
			System.out.println("Lembre-se apenas S/N");
			System.out.println("Gostaria de jogar outra vez?(S/N)");
			check = true;

		}
    }while (check == true);
    }
   while(resposta != x && resposta != -1){ 
    if (resposta != x){
    	if(resposta < x){
    			System.out.println("Tente um numero mais alto!");
    			System.out.println("Introduza um número (1-100, -1 para desistir):");
    			resposta = resp.nextInt();
    			tentativas++;
    			if(resposta == -1){
    		    	System.out.println("A resposta era " + x);
    		    	System.out.println("Gostaria de jogar outra vez?(S/N)");
    		    	do{
    		    	char c = (char) System.in.read();
    				switch (c){
    				
    				case 's':
    				case 'S':
    					System.out.println("Você respondeu SIM");
    					check = false;
    					repetir = true;
    					break;
    					
    				case 'n':
    				case 'N':
    					System.out.println("Você respondeu NÃO");
    					check = false;
    					repetir = false;
    				break;
    				
    				default:
    					System.out.println("Lembre-se apenas S/N");
    					System.out.println("Gostaria de jogar outra vez?(S/N)");
    					check = true;
    					
    				}
    		    }while (check == true);
    	}
    	if(resposta > x){
    		System.out.println("Tente um numero mais baixo!");
    			System.out.println("Introduza um número (1-100, -1 para desistir):");
    			resposta = resp.nextInt();
    			tentativas++;
    			if(resposta == -1){
    		    	System.out.println("A resposta era " + x);
    		    	System.out.println("Gostaria de jogar outra vez?(S/N)");
    				char c = (char) System.in.read();
    				switch (c){
    				case 's':
    				case 'S':
    					System.out.println("Você respondeu SIM");
    					repetir = true;
    					
    					break;
    				case 'n':
    				case 'N':
    					System.out.println("Você respondeu NÃO");
    					repetir = false;
    					
    				break;
    				default:
    					System.out.println("Lembre-se apenas S/N");
    				
    		    }
    		    }
    	}
    }
   }
   
    if (resposta == x){
    	System.out.println("Parabens você ganhou em " + tentativas + " tentativas!");
		System.out.println("Gostaria de jogar outra vez?(S/N)");
		char c = (char) System.in.read();
		switch (c){
		case 's':
		case 'S':
			System.out.println("Você respondeu SIM");
			repetir = true;

			break;
		case 'n':
		case 'N':
			System.out.println("Você respondeu NÃO");
			repetir = false;

		break;
		default:
			System.out.println("Lembre-se apenas S/N");

    }
    
	}
    
}

}while(repetir == true);
}
}

Share this post


Link to post
Share on other sites
Diutsu

Olha, estive a tentar fazer debug ao teu código e das duas uma, ou é uma coisa extremamente óbvia como um sinal, ou é uma coisa extremante esquisita, porque eu não encontrei nenhum na semantica (isto não quer dizer que esteja bom).

Tem em atenção em o fluxo de execução no teu programa embora bastante linear, não é muito fácil de acompanhar, porque tens ciclos e condições lá dentro o que leva a que acabes por saltar muito de um lado para o outro, e o switch() tinha ficado a matar se estivesse encapsulado numa função, assim faz-me confusão a ler (também deve fazer a outras pessoas).


XX SINFO - Semana Informática

Share this post


Link to post
Share on other sites
Knitter

Não prestei muita atenção ao código mas dado que estás a usar o System.in.read() diria que o problema estás nos dois caracteres de controlo de mudanças de linha, o '\r' e o '\n' que estão no buffer. Isto é, cada vez que carregas na tecla enter, além do texto que escreveres, é enviado um conjunto de caracteres para a mudança de linha.

Um carácter errado, um '\r' e um '\n' farão aparecer as mensagens 3 vezes.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.