Ir ao conteúdo
  • Cadastre-se

Repetição dentro de repetição


Posts recomendados

Bem, estou aprendendo java, e me deparei com um exercício o qual eu deveria fazer uma pesquisa captando a idade e a opinião das pessoas quanto ao filme, onde a entrada de dados sobre a opinião deve ser validada e o final da pesquisa será indicado quando a idade do usuário for informada como zero.

 

além disso, as saídas devem conter:

 

Quantidade de pessoas que respondeu a pesquisa

Média de idade das pessoas que responderam a pesquisa

Porcentagem de cada uma das respostas

 

 

meu problema é que quando eu digito digito zero para a idade, ela ainda pergunta a opinião (e esta esta está sendo contabilizada) antes de encerrar a execução... Se alguém puder me ajudar, fico grato !

package fixacao;import java.util.Scanner;public class Ex05 {	public static void main(String[] args) {	Scanner entrada = new Scanner(System.in);		int soma,id,optA,optB,optC,optD,optE,i;	double media,pctA,pctB,pctC,pctD,pctE;	String op;		i=-1;	id=-1;	soma=0;	optA=0;	optB=0;	optC=0;	optD=0;	optE=0;	media=0;	pctA=0;	pctB=0;	pctC=0;	pctD=0;	pctE=0;	op=null;		while(id!=0){		System.out.println("Insira a idade");		id=entrada.nextInt();				i++;		soma=soma+id;							do{			System.out.println("Insira a opinião");			op=entrada.next();			if (op.equalsIgnoreCase("A")){				optA++;			}else if (op.equalsIgnoreCase("B")){				optB++;			}else if (op.equalsIgnoreCase("C")){				optC++;			}else if (op.equalsIgnoreCase("D")){				optD++;			}else if (op.equalsIgnoreCase("E")){				optD++;			}else{				System.out.println("Escolha uma opinião válida");			}		} while((! op.equalsIgnoreCase("A")) && (! op.equalsIgnoreCase("B")) && (! op.equalsIgnoreCase("C")) && (! op.equalsIgnoreCase("D")) && (! op.equalsIgnoreCase("E")));		 	}		if (i!=0){		media=soma/i;		pctA=(double)optA/i;		pctB=(double)optB/i;		pctC=(double)optC/i;		pctD=(double)optD/i;		pctE=(double)optE/i;	}		System.out.println("Quantidade de pessoas que responderam a pesquisa: "+i);		System.out.println("Média de idade das pessoas que responderam a pesquisa: "+media);		System.out.println("Porcentagem de opinião A: "+pctA);		System.out.println("Porcentagem de opinião B: "+pctB);		System.out.println("Porcentagem de opinião C: "+pctC);		System.out.println("Porcentagem de opinião D: "+pctD);		System.out.println("Porcentagem de opinião E: "+pctE);				entrada.close();}}
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá.

 

meu problema é que quando eu digito digito zero para a idade, ela ainda pergunta a opinião (e esta esta está sendo contabilizada) antes de encerrar a execução... Se alguém puder me ajudar, fico grato !

 

 

Está verificação da condição ser igual a zero ou não deve ser feita antes da próxima etapa. Repare, logo depois da leitura da idade, o código já pergunta a opinião, independente do valor da idade (até mesmo se for negativa), ou seja, deve ter uma estrutura de seleção (if) antes da próxima etapa (só ler a opinião se a idade for válida)...


PS: cuidado com a identação, ela também é critério de avaliação:

Pelo que avaliei, tem dois trechos que não estão identados... (coloquei um comentário acima de cada um)

package fixacao;import java.util.Scanner;public class Ex05 {    //esse método está dentro da classe, logo vai um "dente" pra frente    public static void main(String[] args) {            Scanner entrada = new Scanner(System.in);                int soma,id,optA,optB,optC,optD,optE,i;        double media,pctA,pctB,pctC,pctD,pctE;        String op;                i=-1;        id=-1;        soma=0;        optA=0;        optB=0;        optC=0;        optD=0;        optE=0;        media=0;        pctA=0;        pctB=0;        pctC=0;        pctD=0;        pctE=0;        op=null;                while(id!=0){            System.out.println("Insira a idade");            id=entrada.nextInt();                        i++;            soma=soma+id;            do{                System.out.println("Insira a opinião");                op=entrada.next();                if (op.equalsIgnoreCase("A")){                    optA++;                }else if (op.equalsIgnoreCase("B")){                    optB++;                }else if (op.equalsIgnoreCase("C")){                    optC++;                }else if (op.equalsIgnoreCase("D")){                    optD++;                }else if (op.equalsIgnoreCase("E")){                    optD++;                }else{                    System.out.println("Escolha uma opinião válida");                }            } while((! op.equalsIgnoreCase("A")) && (! op.equalsIgnoreCase("B")) && (! op.equalsIgnoreCase("C")) && (! op.equalsIgnoreCase("D")) && (! op.equalsIgnoreCase("E")));                    }                if (i!=0){            media=soma/i;            pctA=(double)optA/i;            pctB=(double)optB/i;            pctC=(double)optC/i;            pctD=(double)optD/i;            pctE=(double)optE/i;        }        //esse trecho está fora do if, logo fica um "dente" para trás.        System.out.println("Quantidade de pessoas que responderam a pesquisa: "+i);        System.out.println("Média de idade das pessoas que responderam a pesquisa: "+media);        System.out.println("Porcentagem de opinião A: "+pctA);        System.out.println("Porcentagem de opinião B: "+pctB);        System.out.println("Porcentagem de opinião C: "+pctC);        System.out.println("Porcentagem de opinião D: "+pctD);        System.out.println("Porcentagem de opinião E: "+pctE);        entrada.close();    }}

No aguardo.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...