Duvida_Basica

16 respostas
Tonny_Stark

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

import java.util.Scanner;//importa a classe util.Scanner

import java.text.DecimalFormat;

import <a href="http://java.io">java.io</a>.*;
class Pesquisa_Empresa {

public static void main ( String args [] ){

BufferedReader entrada;

entrada= new BufferedReader( new InputStreamReader (System.in));
DecimalFormat deci = new DecimalFormat("0.00");
	
		/*declaracao de variaveis*/

		double salario;
		double media_sal;
		int media_filhos;
		int qtde_filhos;
		int cadastro;
		double soma_sal;
		int soma_filhos;
		soma_sal = 0f;
		soma_filhos = 0;
		int cont;
		cont=0;
		double maior_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 (Exception e) {

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

16 Respostas

A

a

Tonny_Stark

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

Tente inicializar ela assim:

double maior_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…

ele considera o maior_sal = 0.

import java.util.Scanner;//importa a classe util.Scanner

import java.text.DecimalFormat;

import <a href="http://java.io">java.io</a>.*;
class Pesquisa_Empresa {

public static void main ( String args [] ){

BufferedReader entrada;

entrada= new BufferedReader( new InputStreamReader (System.in));
DecimalFormat deci = new DecimalFormat("0.00");
	
	 		
		/*declaracao de variaveis*/
		double salario;
		double media_sal;
		int media_filhos;
		int qtde_filhos;
		int cadastro;
		double soma_sal;
		int soma_filhos;
		soma_sal = 0d;
		soma_filhos = 0;
		int cont;
		cont=0;
		double maior_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 (Exception e) {

System.out.println("Ocorreu um erro durante a leitura!");
	}
}
}
A

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

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.text.DecimalFormat;

class Pesquisa_Empresa {
	public static void main ( String args [] ){
		BufferedReader entrada;
		entrada= new BufferedReader( new InputStreamReader (System.in));


		DecimalFormat deci = new DecimalFormat("0.00");


		/*declaracao de variaveis*/
		double salario = 0d;
		double media_sal = 0d;
		int media_filhos;
		int qtde_filhos;
		int cadastro;
		double soma_sal = 0d;
		int soma_filhos = 0;
		int cont = 0;
		double maior_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 (Exception e) {

			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

Diego_Fontenele

interessante,

soma_salario = soma_salario + salario;     //a variavel soma_salario não vai apagar no proximo loop?

soma_filhos += filho; // no caso deste programa a soma dos filhos podem ficar assim.

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!

Scanner sc=new Scanner(System.in);

        int resp=0;
        double salario=0;
        double soma_salario=0;
        double maior_salario=0;
        int filho=0;
        int soma_filhos=0;
        int cont=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(Exception ex)
    {
        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

import java.util.Scanner;//importa a classe util.Scanner
import java.text.DecimalFormat;
import java.io.*;

 class Pesquisa_Empresa {
 	public static void main ( String args [] ){
 		BufferedReader entrada;
 		entrada= new BufferedReader( new InputStreamReader (System.in));
 		
 		
 		DecimalFormat deci = new DecimalFormat("0.00");
 		
 		 		
  			/*declaracao de variaveis*/
			double salario = 0d;
			double media_sal = 0d;
			int media_filhos;
			int qtde_filhos;
			int cadastro;
			double soma_sal = 0d;
			int soma_filhos = 0;
			int cont = 0;
			double maior_sal = 0d;
			double sal_minimo = 460;//valor do salario minimo
			double porcentagem ;
			int contsal = 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 (Exception e) {
 	
 			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 fazer
                               
         contsal++;  
       }

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! :slight_smile:

Criado 10 de março de 2009
Ultima resposta 11 de mar. de 2009
Respostas 16
Participantes 4