Ajuda com trabalho

16 respostas
S

O professor mandou uma penca de exercicios pra entregar .. e hoje é o prazo final ! tem uns 2 que estou terminando .. sendo que este não consigo de jeito nenhum .. é muito complicado ! olhem o que o exercício pede:

6. Apopulação de uma cidade está fora do peso considerado ideal, por isso o prefeito, muito preocupado, encomendou uma pesquisa para verificar:

a) a média da idade das pessoas que estão fora do peso;
b) a média da idade das pessoas que estão dentro do peso;
c) a porcentagem de homens com peso ideal;
d) a porcentagem de homens com peso maior que o ideal;
e) a porcentagem de homens com peso menor que o ideal;
f) a média do peso de todos os homens;
g) a porcentagem de mulheres com peso ideal;
h) a porcentagem de mulheres com peso maior que o ideal;
i) a porcentagem de mulheres com peso menor que o ideal;
j) a média do peso de todas as mulheres.
Orientações:
1. O algoritmo/programa deve ler a idade da pessoa, altura, seu sexo e peso.
2. Deverão ser consideradas quantas pessoas o usuário desejar, para isso deverá ser lida uma resposta ao final de cada volta.
3. O peso dos homens é calculado por (72,7*altura)-58
4. O peso das mulheres é calculado por(62,1*altura)-44,7

Estou fazendo a letra C,D,E,G,H,I .. só que esta dando erro em alguma coisa e está pulando pro catch .. se eu tiro toda parte do feminino funciona só com o masculino .. agora quando adiciono o contador feminino para de novo =s
analisem o código abaixo !

import java.io.*;
   class exercicio7{

       public static void main(String args[]) {
           BufferedReader entrada;
           entrada = new BufferedReader(new InputStreamReader(System.in));
int contador = 1, idade, sexo, contpesoMASC = 0, contpesoMASCSUP = 0, contpesoMASCINF = 0, contpesoFEM = 0, contpesoFEMSUP = 0, contpesoFEMINF = 0;
float altura, peso, pideal, porcC, porcD, porcE, porcG, porcH, porcI, contadorpesoMASC = 0, contadorpesoFEM = 0;


        System.out.println("-------------------------------------------------------------------");
        System.out.println("Bem Vindo .... \n");
        System.out.println("");
        System.out.println("-------------------------------------------------------------------\n\n");
        int contadorMASC = 0;
        int contadorFEM = 0;
        int sair;


        while(true) {
               try {


                   System.out.println("Digite a Idade:");
                   idade = Integer.parseInt(entrada.readLine());
                   while (idade < 0 || idade > 125) { System.out.println("Digite a Idade ( DADOS ENTRE 0 e 125 ANOS ):");
                   idade = Integer.parseInt(entrada.readLine()); }

                   System.out.println("Digite o Sexo ( 1 - MASCULINO || 2 - FEMININO ):");
                   sexo = Integer.parseInt(entrada.readLine());
                   while (sexo < 1 || sexo > 2) { System.out.println("Digite corretamente o Sexo ( 1 - MASCULINO || 2 - FEMININO ):");
                   sexo = Integer.parseInt(entrada.readLine()); }

                   System.out.println("Digite a altura:");
                   altura = Float.parseFloat(entrada.readLine());

                   System.out.println("Digite o peso:");
                   peso = Float.parseFloat(entrada.readLine());

      // PESO IDEAL - INFERIOR E SUPERIOR MASCULINO
                if (sexo == 1) {
			pideal = (float) ((72.7 * altura) - 58);
                if (peso == pideal ) { contpesoMASC++; }
                if (peso > pideal ) { contpesoMASCSUP++; }
                if (peso < pideal ) { contpesoMASCINF++; }
                        contadorpesoMASC = contadorpesoMASC + peso;
                        contadorMASC++;
		}

      // PESO IDEAL - INFERIOR E SUPERIOR FEMININO

		if (sexo == 2) {
			pideal = (float) ((62.1 * altura) - 44.7);
                if (peso == pideal ) { contpesoFEM++; }
                if (peso > pideal ) { contpesoFEMSUP++; }
                if (peso < pideal ) { contpesoFEMINF++; }
                        contadorpesoFEM = contadorpesoFEM + peso;
                        contadorFEM++;
		}




             // letra c - PORCENTAGEM peso ideal MASCULINO
                   porcC = (contpesoMASC * 100) / contadorMASC;
             // letra d - PORCENTAGEM peso maior que o ideal MASCULINO
                   porcD = (contpesoMASCSUP * 100) / contadorMASC;
             // letra e - PORCENTAGEM peso menor que o ideal MASCULINO
                   porcE = (contpesoMASCINF * 100) / contadorMASC;

             // letra g - PORCENTAGEM peso ideal FEMININO

                   porcG = (contpesoFEM * 100) / contadorFEM;
             // letra h - PORCENTAGEM peso maior que o ideal FEMININO
                   porcH = (contpesoFEMSUP * 100) / contadorFEM;
             // letra i - PORCENTAGEM peso menor que o ideal FEMININO
                   porcI = (contpesoFEMINF * 100) / contadorFEM;




                System.out.println("A porcentagem de HOMENS no seu peso ideal é de: " + porcC);
                System.out.println("A porcentagem de HOMENS acima do seu peso ideal é de: " + porcD);
                System.out.println("A porcentagem de HOMENS abaixo do seu peso ideal é de: " + porcE);

                System.out.println("A porcentagem de MULHERES no seu peso ideal é de: " + porcG);
                System.out.println("A porcentagem de MULHERES acima do seu peso ideal é de: " + porcH);
                System.out.println("A porcentagem de MULHERES abaixo do seu peso ideal é de: " + porcI);


contador++;


                        	System.out.print("Deseja continuar? [1 - SIM /2 - NAO]: ");
				sair = Integer.parseInt(entrada.readLine());
                                while (sair > 2 || sair < 1) {  System.out.print("Digite corretamente .. Deseja continuar? [1 - SIM /2 - NAO]: "); sair = Integer.parseInt(entrada.readLine()); }
                                if (sair > 1 && sair < 3) {break;}


                   System.out.println("\n\n");
               } catch (Exception e) {
                   System.out.println("Ocorreu um erro durante a leitura ! ");
               }



     }



       }
  }

Obrigado !

16 Respostas

rogelgarcia

Troque

} catch (Exception e) { System.out.println("Ocorreu um erro durante a leitura ! "); }

por

} catch (Exception e) { e.printStackTrace(); }

Que vc vai ver qual é o erro…

Talvez uma divisão por 0 possa estar acontecendo

Gustavokt

Analise a exceção…

Tente fazer um debug, percorrer linha a linha…

S

Não sei mexer em java direito nem no netbeans … meu 1º semestre na facul … HAUHAUHA

  • troquei o catch e tava dividindo por zero.

Ai modifiquei onde tava:

int contadorMASC = 0; int contadorFEM = 0;
para:

int contadorMASC = 1; int contadorFEM = 1;

  • agora divide por 2 no primeiro calculo … que droga =s

valeu pela ajuda de vcs

marcelo.bellissimo

Que tal se você verificar o valor do contador antes de realizar os cálculos e exibir as mensagens?
Exemplo: se nenhum dado de uma pessoa do sexo feminino foi inserido, não calcule os percentuais femininos, nem exiba as mensagens…

S

AEEEEEEEEEE agora ta indo .. resolvi assim:

abusando um pouquinho da boa vontade de vcs .. como eu faço pra forçar a pessoa a digitar o número EX: X.XX ( NA APRTE DA ALTURA EU PRECISO DISSO) E pra impedir que a pessoa digite letras e números pq no meu exercicio ta passando .. valeu!

if (contadorMASC == 0) {
                   porcC = (contpesoMASC * 100);
                   porcD = (contpesoMASCSUP * 100);
                   porcE = (contpesoMASCINF * 100);
               } else {
             // letra c - PORCENTAGEM peso ideal MASCULINO
                   porcC = (contpesoMASC * 100) / contadorMASC;
             // letra d - PORCENTAGEM peso maior que o ideal MASCULINO
                   porcD = (contpesoMASCSUP * 100) / contadorMASC;
             // letra e - PORCENTAGEM peso menor que o ideal MASCULINO
                   porcE = (contpesoMASCINF * 100) / contadorMASC;
               }

 
               if (contadorFEM == 0) {
                       porcG = (contpesoFEM * 100) / contadorFEM;
                       porcH = (contpesoFEMSUP * 100) / contadorFEM;
                       porcI = (contpesoFEMINF * 100) / contadorFEM;
                   } else {
             // letra g - PORCENTAGEM peso ideal FEMININO
                   porcG = (contpesoFEM * 100) / contadorFEM;
             // letra h - PORCENTAGEM peso maior que o ideal FEMININO
                   porcH = (contpesoFEMSUP * 100) / contadorFEM;
             // letra i - PORCENTAGEM peso menor que o ideal FEMININO
                   porcI = (contpesoFEMINF * 100) / contadorFEM;
                   }
marcelo.bellissimo

:?:

Como assim? Impedir letras e números? Não seria apenas letras?
Se for, tente o seguinte… substitua:

System.out.println("Digite a altura:"); altura = Float.parseFloat(entrada.readLine());
por:

String alt = null; while (alt == null || alt.trim().equals("")) { System.out.println("Digite a altura:"); alt = entrada.readLine(); try { altura = Float.parseFloat(entrada.readLine()); } catch (NumberFormatException e) { alt = null; } }

S

Marcelo muito obrigado mesmo … eu até tentei fazer a partir de uns codigos que axei aqui + não consegui … vou testar o seu agora ^^

é que no caso da altura eu queria que bloqueasse o usuario a digitar um numero X.xx - pq qd ele digita um numero XXXXXXXXX passa ai o professor deve tirar ponto …

Tem aLgum livro que trata só esses erros ? pq não tive conteudo na faculdade ainda que tratasse esses erros … + o professor pede ¬¬

VAleu ! brigadao pela ajuda de vcs !

e aquele catch que mostra os erros eu nem sabia

S

Marcelo …

não deu certo dessa forma não =s

marcelo.bellissimo

sbrito:
Marcelo …

não deu certo dessa forma não =s

Como, não deu certo em que sentido? Deu algum erro? O programa não funcionou como o esperado? O que houve?

S

Desculpe a demora - não funcionou como esperado eu axo

o programa parece que trava e não pede o seguinte valor … e não sai da ALTURA … fica num while infino que smp pede a ALTURA

  • eu acabei de terminar o trabalho - só essas exceçoes que eu não tratei.

TIPO O PROGRAMA PEDE PRA PESSOA DIGITAR UM NOME:
no meu programa passa nome … numero tudo !! não sei como restringir isso =s

E

QUANDO O PROGRAMA PEDE UM NÚMERO COM PONTO, EX: 1.20
ai se eu digito 120 e esqueço do ponto passa tbm =s

Valeu !

marcelo.bellissimo

Opa, um errinho… correção:

String alt = null; while (alt == null || alt.trim().equals("")) { System.out.println("Digite a altura:"); alt = entrada.readLine(); try { altura = Float.parseFloat(alt); // aqui estava lendo o input de novo... esqueci disso } catch (NumberFormatException e) { e.printStackTrace(); alt = null; } }

Se der erro ainda, manda o stackTrace…

S

Marcelo Brigadao !

vou testar aqui … + agora ja fiz a mídia e vou entregar sem esses tratamentos mesmo !!

HAUHAUAH devo perder alguns décimos + pelo menos consegui fazer todos os exercicios !

vou guardar essas informações aqui comigo pq concerteza pra AV2 terão + exercícios !

valeu ! abraço

WellingtonRamos

Pode ser também erro de parse.
Mas acho mais provável divisão por zero.

Antes de fazer uma divisão, verifique se o divisor é diferente de 0.

WellingtonRamos

sbrito:
Não sei mexer em java direito nem no netbeans … meu 1º semestre na facul … HAUHAUHA

  • troquei o catch e tava dividindo por zero.

Ai modifiquei onde tava:

int contadorMASC = 0; int contadorFEM = 0;
para:

int contadorMASC = 1; int contadorFEM = 1;

  • agora divide por 2 no primeiro calculo … que droga =s

valeu pela ajuda de vcs

Antes de dividir, faça só uma verificação :wink:
Se for 0, não divida (mesmo pq, não deveria haver algum valor a ser dividido tbm).

WellingtonRamos

faça um loop estilo do-while.
Enquanto não for o q deseja, force o cara a re-preencher corretamente (lembre-se que, pode ocorrer exceção e mesmo assim deve continuar funcionando).

WellingtonRamos
System.out.println("Digite a altura:");
boolean teste = false;
do {
 try {
  altura = Float.parseFloat(entrada.readLine()); 

  teste = testaValorValido(altura);
 } catch (Exception e) {
  e.printStackTrace();
 }
 if(!teste) {
  System.out.println("Valor inválido, tente novamente");
 }
} while(!teste);

O método testeValorValido observa se o valor é negativo, muito grande, etc.
Se houver exceção de parse para float, é capturado mas continua tentando obter a mensagem.
A assinatura seria

private boolean testaValorValido(float valor){ //Faça a verificação. }

Criado 14 de abril de 2010
Ultima resposta 14 de abr. de 2010
Respostas 16
Participantes 5