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 
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) 
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