sbrito:
Outro trabalho da facul galera ;]
+ a minha duvida eh o seguinte ..
System.out.println("Digite o Canal:");
canal = Integer.parseInt(entrada.readLine());
while (canal =! 4 || canal =! 5 || canal =! 7 || canal =! 12){
System.out.println("Dados incorretos!!Digite novamente o Canal...");
olhem acima como eu faço pro while ter varias condiçoes ?? eu uso o ou com o simbolo || + nao vai ..
Obrigado pela ajuda
Olá, primeiro vou explicar como funciona a condição WHILE: while (canal != 4 || canal != 5 || canal != 7 || canal != 12)
'ou' = OR = || ==> Basta que um termo da condição seja TRUE para entrar no laço.
'e' = AND = && ==> TODOS os termos da condição devem ser TRUE para entrar no laço.
Neste caso basta que um termo seje TRUE que vai entrar no laço.
1º termo: canal != 4 - traduzindo: canal é diferente de 4? se isso for verdadeiro vai entrar no laço.
ex. se eu digitar 4 o 1º termo do laço é falso porém no 2º termo já será TRUE e vai entrar no laço.
ex. se eu digitar 5 o 1º termo do laço é TRUE e já vai entrar no laço.
Tendo dito isto mudei um pouco seu código (uma breve olhada e vc já entende o que eu mudei):
import java.io.BufferedReader;
import java.io.InputStreamReader;
class pesquisacanal {
public static void main(String args[]) {
BufferedReader entrada;
entrada = new BufferedReader(new InputStreamReader(System.in));
int contador, contadorC0 = 0, contadorC4 = 0, contadorC5 = 0, canal, contadorC7 = 0, contadorC12 = 0, pessoas, porcent4 = 0, porcent5 = 0, porcent7 = 0, porcent12 = 0, sair;
System.out.println("-------------------------------------------------------------------");
System.out.println("Pesquisa de Canais");
System.out.println("-------------------------------------------------------------------\n");
contador = 1;
while (contador < 5000) {
try {
System.out.print("Digite o Canal: ");
do {
canal = Integer.parseInt(entrada.readLine());
System.out.println();
if(canal == 4 || canal == 5 || canal == 7 || canal == 12){break;}
System.out.print("Dados incorretos!! Digite novamente o Canal: ");
} while (true);
switch (canal) {
case 4: contadorC4++; break;
case 5: contadorC5++; break;
case 7: contadorC7++; break;
case 12: contadorC12++; break;
default:
System.out.println("Dados incorretos!");
break;
}
System.out.print("Quantas pessoas estavam assistindo? : ");
pessoas = Integer.parseInt(entrada.readLine());
while (pessoas < 0) {
System.out.println("Dados Incorretos!! Digite Novamente...");
System.out.print("Quantas pessoas estavam assistindo? : ");
pessoas = Integer.parseInt(entrada.readLine());
System.out.print("--------------------------------------- \n");
}
System.out.print("Deseja continuar? [1 - SIM /2 - NAO]: ");
sair = Integer.parseInt(entrada.readLine());
if (sair > 1 && sair < 3) {break;}
} catch (Exception e) {
System.out.println("----------------------------------------");
}
contador++;
}
System.out.println("-------------------------------------------------------------------");
porcent4 = (contadorC4 * 100) / contador;
porcent5 = (contadorC5 * 100) / contador;
porcent7 = (contadorC7 * 100) / contador;
porcent12 = (contadorC12 * 100) / contador;
System.out.println("-------------------------------------------------------------------");
System.out.println("Número de casas assistindo o canal 4 -->"
+ contadorC4 + " --> e sua porcentagem:" + porcent4);
System.out.println("Número de casas assistindo o canal 5 -->"
+ contadorC5 + " --> e sua porcentagem:" + porcent5);
System.out.println("Número de casas assistindo o canal 7 -->"
+ contadorC7 + " --> e sua porcentagem:" + porcent7);
System.out.println("Número de casas assistindo o canal 12 -->"
+ contadorC12 + " --> e sua porcentagem:" + porcent12);
System.out.println("-------------------------------------------------------------------");
System.out.println("Programa Encerrado ... ");
}
}
Considerações:
Quando vc tem um número grande de opções difetentes de INT use switch case ao invés de IFs aninhados, é mais rápido.
E se eu digitar uma letra o que acontece? Por isso faça sempre tratamento da entrada de dados.
Espero que tenha ajudado.