Problema com a variável char

Olá, pessoal.

Sou iniciante em Java, então a pergunta é um pouco boba, mas uma resposta vai ser muito útil para mim:

Quero fazer um programa onde se pergunta para 50 pessoas se elas gostam de futebol e conta quantos “sim” e “não” as perguntas receberam. Porém, quero que o programa alerte uma mensagem de erro quando o usuário digita algo diferente de S ou N mas o treco não tá funcionando! Ele dá erro mesmo quando o usuário digita ‘S’ ou ‘N’.

Eu sei que eu poderia usar String, mas quero usar char :slight_smile:

O que tem de errado com o código ou que eu poderia alterar para melhorar?

Segue abaixo:

public static void main(String[] args) {
    Scanner leitor = new Scanner(System.in);

    int contS = 0;
    int contN = 0;
	
	char resposta;

	for (int cont = 1; cont <= 4; cont++) {
		System.out.println("Você gosta de futebol? Digite S ou N:");
		resposta = leitor.next().charAt(0);

		do {
			System.out.println("Erro! Você gosta de futebol? Digite S ou N:");
			resposta = leitor.next().charAt(0);
		} while (resposta != 'S' || resposta != 'N');

		if (resposta == 'S') {
			contS++;
		} else if (resposta == 'N') {
			contN++;
		}
		
		System.out.println("Pessoas que gostam de futebol: " + contS);
		System.out.println("Pessoas que não gostam de futebol: " + contN);
	}

}

OBS: No for troquei o 50 por 4 para facilitar o teste.

Thanks! x)

Acontece porque sua condição ou " || " não está correta, assim você diz que é para fazer enquanto a resposta for diferente de ‘S’ ou diferente de ‘N’, ora se a resposta for S ela é diferente de N e vice e versa, então sempre vai ser verdadeira, oque precisas é colocar a condição “&&”, assim só repetira se as duas condições forem falsas.

outra coisa você tem que repetir o teste dentro do while se não ele sempre vai repetir oque está dentro do do-while mesmo se estiver correto pelo menos mais uma vez.

abaixo código modificado.

public static void main(String[] args) {
    Scanner leitor = new Scanner(System.in);

    int contS = 0;
    int contN = 0;

    char resposta;

    for (int cont = 1; cont <= 4; cont++) {
        System.out.println("Você gosta de futebol? Digite S ou N:");
        resposta = leitor.next().charAt(0);

        do {
            if (resposta != 'S' && resposta != 'N') {
                System.out.println("Erro! Você gosta de futebol? Digite S ou N:");
                resposta = leitor.next().charAt(0);
            }
        } while (resposta != 'S' && resposta != 'N');

        if (resposta == 'S') {
            contS++;
        } else if (resposta == 'N') {
            contN++;
        }

        System.out.println("Pessoas que gostam de futebol: " + contS);
        System.out.println("Pessoas que não gostam de futebol: " + contN);
    }

}
2 curtidas

Thanks! Li o que vc escreveu antes do código e tentei alterá-lo por mim mesma… Sua resposta me deu uma luz, vou dar mais uma estudada em operadores lógicos (se eu tivesse prestado a atenção na tabela da verdade, não teria cometido esse erro) :stuck_out_tongue_closed_eyes:

OBS: Outro erro meu foi imprimir os resultados da enquete dentro do for, sendo que era para imprimir apenas no final.

Vlw pela ajuda

Ou você pode fazer assim:

import java.util.Scanner;
public class EX {

    public static void main(String[] args) {
    Scanner leitor = new Scanner(System.in);

    int contS = 0;
    int contN = 0;
    char resposta;
    int cont = 0;
        
    System.out.println("Quantas pessoas será entrevistadas?");
    int qtdPerguntas = leitor.nextInt();
        
        do {
               System.out.println("Você gosta de futebol? Digite S ou N:");
		resposta = leitor.next().charAt(0);
                switch(resposta) {
                    case 'S': 
                        contS++; 
                        cont++;
                        break;
                    case 'N':
                        contN++;
                        cont++;
                        break;
                    default: System.out.println("Resposta invalida! \n");    
                     
                } 
        }
        while(cont <qtdPerguntas);
        
        	System.out.println("Pessoas que gostam de futebol: " + contS);
		System.out.println("Pessoas que não gostam de futebol: " + contN);
    }
}
1 curtida