ola, sou iniciante na programacao porem esforcado para aprender
na faculadade o professor passou um exercicio, consegui fazer quase todo mas faltou um item.gostaria da ajuda de vcs para resolve-lo.
bom, o programa abaixo pergunta se o usuario que cadastrar um novo funcionario. se a resposta for sim ele digita o salario e a qtde de filhos.
quando a resposta e NAO, o programa exibe a media salarial,a media de filhos e deveria exibir O MAIOR SALARIO,porem nao consigo realizar essa parte, ja que ele esta retornando o ultimo salario digitado.
desde ja agradeco a atencao de todos
DecimalFormatdeci=newDecimalFormat("0.00");/*declaracao de variaveis*/doublesalario;doublemedia_sal;intmedia_filhos;intqtde_filhos;intcadastro;doublesoma_sal;intsoma_filhos;soma_sal=0f;soma_filhos=0;intcont;cont=0;doublemaior_sal;salario=0;try{System.out.printf("Voce deseja cadastrar funcionario (1-sim/ 2-nao) ->");cadastro=Integer.parseInt(entrada.readLine());while(cadastro==1){System.out.printf("Digite o salario ->");salario=Double.parseDouble(entrada.readLine());soma_sal=soma_sal+salario;maior_sal=salario;System.out.printf("Digite a quantidade de filhos ->");qtde_filhos=Integer.parseInt(entrada.readLine());soma_filhos=soma_filhos+qtde_filhos;System.out.printf("Voce deseja cadastrar outro funcionario (1-sim/ 2-nao) ->");cadastro=Integer.parseInt(entrada.readLine());cont=cont+1;}maior_sal=salario;media_sal=soma_sal/cont;System.out.printf("\na) Media Salarial ->%s\n",deci.format(media_sal));media_filhos=soma_filhos/cont;System.out.println("\nb) Media da Quantidade de Filhos ->"+media_filhos);if(salario>maior_sal){System.out.printf("\nc) O maior salario e -> ",+maior_sal);}else{System.out.println("\nc) Maior Salario ->"+salario);}}catch(Exceptione){System.out.println("Ocorreu um erro durante a leitura!");}}}
Amigo, obrigado por responder. bom,tentei colocar a condicao dentro do while e fora e as duas opcoes geram erro;informando que a variavel maior_sal tem que ser inicializada. entao inicializo com o valor 0 e o resultado nao e o esperado.
A
Andtt
Tente inicializar ela assim:
doublemaior_salario=0d;
Sua variável é do tipo double, se vc inicializar com 0 estará tentando armazenar um inteiro numa variavel double,
por isso sempre que inicializar uma variavel double use um 0d.
Abs
Tonny_Stark
o prog ficou assim, porem ainda continua nao retornando o maior salario…
DecimalFormatdeci=newDecimalFormat("0.00");/*declaracao de variaveis*/doublesalario;doublemedia_sal;intmedia_filhos;intqtde_filhos;intcadastro;doublesoma_sal;intsoma_filhos;soma_sal=0d;soma_filhos=0;intcont;cont=0;doublemaior_sal=0d;salario=0d;try{System.out.printf("Voce deseja cadastrar funcionario (1-sim/ 2-nao) ->");cadastro=Integer.parseInt(entrada.readLine());while(cadastro==1){System.out.printf("Digite o salario ->");salario=Double.parseDouble(entrada.readLine());soma_sal=soma_sal+salario;System.out.printf("Digite a quantidade de filhos ->");qtde_filhos=Integer.parseInt(entrada.readLine());soma_filhos=soma_filhos+qtde_filhos;System.out.printf("Voce deseja cadastrar outro funcionario (1-sim/ 2-nao) ->");cadastro=Integer.parseInt(entrada.readLine());cont=cont+1;}media_sal=soma_sal/cont;System.out.printf("\na) Media Salarial ->%s\n",deci.format(media_sal));media_filhos=soma_filhos/cont;System.out.println("\nb) Media da Quantidade de Filhos ->"+media_filhos);System.out.println("\nc) Maior Salario ->"+maior_sal);if(maior_sal>salario){maior_sal=salario;}}catch(Exceptione){System.out.println("Ocorreu um erro durante a leitura!");}}}
A
Andtt
Dei uma arrumada no seu codigo,
O problema era que o if que jogava o salario para a variavel maior_sal estava fora do while, então ele não conseguia atribuir o valor para a
sua variavel.
Segue o codigo corrigido
importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.text.DecimalFormat;classPesquisa_Empresa{publicstaticvoidmain(Stringargs[]){BufferedReaderentrada;entrada=newBufferedReader(newInputStreamReader(System.in));DecimalFormatdeci=newDecimalFormat("0.00");/*declaracao de variaveis*/doublesalario=0d;doublemedia_sal=0d;intmedia_filhos;intqtde_filhos;intcadastro;doublesoma_sal=0d;intsoma_filhos=0;intcont=0;doublemaior_sal=0d;try{System.out.printf("Voce deseja cadastrar funcionario (1-sim/ 2-nao) -> ");cadastro=Integer.parseInt(entrada.readLine());while(cadastro==1){System.out.printf("Digite o salario -> ");salario=Double.parseDouble(entrada.readLine());soma_sal=soma_sal+salario;System.out.printf("Digite a quantidade de filhos -> ");qtde_filhos=Integer.parseInt(entrada.readLine());soma_filhos=soma_filhos+qtde_filhos;System.out.printf("Voce deseja cadastrar outro funcionario (1-sim/ 2-nao) -> ");cadastro=Integer.parseInt(entrada.readLine());cont=cont+1;if(maior_sal<salario){maior_sal=salario;}}media_sal=soma_sal/cont;System.out.printf("\na) Media Salarial ->%s\n",deci.format(media_sal));media_filhos=soma_filhos/cont;System.out.println("\nb) Media da Quantidade de Filhos ->"+media_filhos);System.out.println("\nc) Maior Salario ->"+deci.format(maior_sal));}catch(Exceptione){System.out.println("Ocorreu um erro durante a leitura!");}}}
Qualquer duvida é só avisar
Abs
Tonny_Stark
meu amigo,muito obrigado, acho que o que faltou mesmo foi um pouco atencao e experiencia.
Abçs
o interessante, e o que eu não consegui entender foi soma_salario se alguem poder explicar ficarei grato!!
vlwww
Diego_Fontenele
galera fiz assim usando um pouco mais simples!
Scannersc=newScanner(System.in);intresp=0;doublesalario=0;doublesoma_salario=0;doublemaior_salario=0;intfilho=0;intsoma_filhos=0;intcont=0;try{System.out.println("Deseja cadastrar outro funcionário? 1(Sim) ou 2(Não)");resp=sc.nextInt();while(resp==1){System.out.println("Digite o seu salario");salario=sc.nextDouble();soma_salario=salario;System.out.println("Digite a quantidade de filhos");filho=sc.nextInt();soma_filhos+=filho;System.out.println("Deseja cadastrar outro funcionário? 1(Sim) ou 2(Não)");resp=sc.nextInt();cont++;}if(maior_salario<salario){maior_salario=soma_salario;}System.out.println("Media de salario--"+soma_salario/cont);System.out.println("Media de filhos--"+soma_filhos/cont);System.out.println("O maior salario eh--"+maior_salario);}catch(Exceptionex){System.out.println("Erro de leitura");}
ViniGodoy
Tonny,
Ao postar códigos, use a tag code. Isso vai deixar o código formatado e colorido, como o dos colegas.
Como você é novo do fórum, dá uma lida no artigo abaixo para você aprender esses e outros recursos: http://www.guj.com.br/posts/list/50115.java
Tonny_Stark
a variavel soma_sal foi criada para agregar a soma dos salarios digitados.
ela e importne para que se possa fazer a media salarial
Diego_Fontenele
BLZ, eu quero saber o seguinte, por que não pode ficar assim?
soma_salario+=salario;
Tonny_Stark
bom,como sou novo em programacao,dei uma olhada no livro do Deitel e verifiquei que as duas formas estao corretas,porem como eu ainda nao tinha chegado na proxima pagina, eu coloquei do outro jeito.
obrigado pela dica.
Tonny_Stark
meus amigos,continuando o programa estou tentando extrair do dele a porcentagem das familias que ganaham o sal_min.
criei um if comparando o salario com o sal_min e usei um cont para acumular cada familia que se enquadre na condicao,porem a resposta sempre e 0.0,nao apresenta a porcentagem.
por favoe, se alguem puder me dar uma luz,dizendo onde estou errando,agradeco.
abçs
importjava.util.Scanner;//importa a classe util.Scannerimportjava.text.DecimalFormat;importjava.io.*;classPesquisa_Empresa{publicstaticvoidmain(Stringargs[]){BufferedReaderentrada;entrada=newBufferedReader(newInputStreamReader(System.in));DecimalFormatdeci=newDecimalFormat("0.00");/*declaracao de variaveis*/doublesalario=0d;doublemedia_sal=0d;intmedia_filhos;intqtde_filhos;intcadastro;doublesoma_sal=0d;intsoma_filhos=0;intcont=0;doublemaior_sal=0d;doublesal_minimo=460;//valor do salario minimodoubleporcentagem;intcontsal=0;try{System.out.printf("Voce deseja cadastrar funcionario (1-sim/ 2-nao) ->");cadastro=Integer.parseInt(entrada.readLine());while(cadastro==1){System.out.printf("Digite o salario ->");salario=Double.parseDouble(entrada.readLine());soma_sal=soma_sal+salario;System.out.printf("Digite a quantidade de filhos ->");qtde_filhos=Integer.parseInt(entrada.readLine());soma_filhos=soma_filhos+qtde_filhos;System.out.printf("Voce deseja cadastrar outro funcionario (1-sim/ 2-nao) ->");cadastro=Integer.parseInt(entrada.readLine());cont=cont+1;if(maior_sal<salario){maior_sal=salario;}if(salario==460){salario=sal_minimo;contsal++;}}media_sal=soma_sal/cont;System.out.printf("\na) Media Salarial ->%s\n",deci.format(media_sal));media_filhos=soma_filhos/cont;System.out.println("\nb) Media da Quantidade de Filhos ->"+media_filhos);System.out.printf("\nc) Maior Salario - > %s\n",deci.format(maior_sal));porcentagem=((contsal/cont)*100);System.out.println("\nd)Percentual de familias com salario igual ao sal minimo ->"+porcentagem);}catch(Exceptione){System.out.println("Ocorreu um erro durante a leitura!");}}}
Diego_Fontenele
Boa noite Tonny,
Rapaz o seu programa tem que mudar duas coisas simples:]
if(salario==460){salario=sal_minimo;//pode retirar essa parte não faz muito sentido para o que você deseja fazercontsal++;}
e outra coisa está ficando sempre como zero por que as variaveis CONT e CONTSAL são do tipo INT coloca elas do tipo DOUBLE é isso, se der errado me fale, mas tenho certeza que se fizer isso funciona uma abraço!
Tonny_Stark
meu amigo, quebrei a cabeca ate tarde ontem, e ainda nao tinha visto a sua postagem,
e quase por um milagre,escrevi isso e funcionou....kkk...
if (salario == 460.0){
sal_minimo ++;
System.out.printf("\nd)Percentual de familias com salario igual ao sal minimo -> %s\n ",((sal_minimo/cont)*100 + "%"));
bom, o que eu fiz foi atribuir a variavel sal_minimo cada valor de salario,como tinha feito com a cont_sal,a funcionou.
so que agora eu percebi o pq? A variavel sal_minimo e Double, fiz um teste agora,colocando a cont_sal tb como double e funcionou.
bom,muito obrigado por sua juda.
Abçs.
Diego_Fontenele
Estou ai pra ajudar camarada!!!
qualquer duvida posta ai!