Loopíng Eterno

3 respostas
S

o programa tem que ler funcionários até o seja digitado um salário ZERO

package sintaxe;
import java.util.Scanner;


public class AumentoSalario {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
	
			
		
		Scanner teclado = new Scanner(System.in);
		System.out.println("Digite o cargo do funcionário");
		String cargo = teclado.next();
		System.out.println("Digite o salário do funcionário");
		double salario = teclado.nextInt();
		double salarioNovo = 0;
		double diferenca;
		double percentual1 = 10;
		double percentual2 = 20;
		double percentual3 = 30;
		double percentual4 = 40;
		
		while ( salario != 0){
			
		
		if(cargo.equals("Gerente")){
			salarioNovo = salario+ (salario * (percentual1 / 100));		
			
		} else if (cargo.equals("Engenheiro")) {
			salarioNovo = salario+ (salario * (percentual2 / 100));	
		
		} else if (cargo.equals("Técnico")) {
			salarioNovo = salario+ (salario * (percentual3 / 100));	
			
		} else salarioNovo = salario+ (salario * (percentual4 / 100));	
		
		System.out.println("Salário antigo é: "+salario);
		System.out.println("Novo salário é: "+salarioNovo);
		System.out.println("A diferença é: "+(salarioNovo - salario));
		}
		
	
		
		}

	}

pode ser simples o erro, mas não consigo consertar, se alguém puder me ajudar, agradeço.

3 Respostas

darksteel3000

Amigo, seu problema é no While. Veja que você manda ele executar essa função, enquanto o Salario for diferente de 0. Se eu digitar 1, ele sempre será diferente de 0, entendeu? Acho que você tem que utilizar outra abordagem.

fabiocortolan

Vc deve pegar o salário dentro do laço while e não fora dele, segue abaixo o método corrigido.
Obs.: neste caso a melhor abordagem é o laço “do while” e não “while”, outra coisa, procure identar o código corretamente, vai te ajudar muito para dar manutenção.

Flw…

public static void main(String[] args) {  
		// Variáveis utilizadas no sistema
		Scanner teclado = new Scanner(System.in);;
		String cargo = "";
		double salario = 0;  
		double salarioNovo = 0;  
		double diferenca = 0;  
		double percentual1 = 10;  
		double percentual2 = 20;  
		double percentual3 = 30;  
		double percentual4 = 40;  

		// Altere o while para "do while", dessa forma o código abaixo será executado antes da
		// verificação "salario != 0"
		do {
			// Faça a solicitação dos dados dentro do laço, caso contrário como vc digitará
			// o próximo salário para comparação?
			System.out.println("Digite o cargo do funcionário");  
			cargo = teclado.next();  
			System.out.println("Digite o salário do funcionário");  
			salario = teclado.nextDouble();  

			if(cargo.equals("Gerente")){  
				salarioNovo = salario+ (salario * (percentual1 / 100));       

			} else if (cargo.equals("Engenheiro")) {  
				salarioNovo = salario+ (salario * (percentual2 / 100));   

			} else if (cargo.equals("Técnico")) {  
				salarioNovo = salario+ (salario * (percentual3 / 100));   

			} else salarioNovo = salario+ (salario * (percentual4 / 100));    

			System.out.println("Salário antigo é: "+salario);  
			System.out.println("Novo salário é: "+salarioNovo);  
			System.out.println("A diferença é: "+(salarioNovo - salario));  
		} while ( salario != 0); // comparação do laço para verificar se será executado novamente ou não
	}
S
fabiocortolan:
Vc deve pegar o salário dentro do laço while e não fora dele, segue abaixo o método corrigido. Obs.: neste caso a melhor abordagem é o laço "do while" e não "while", outra coisa, procure identar o código corretamente, vai te ajudar muito para dar manutenção.

Flw...

public static void main(String[] args) {  
		// Variáveis utilizadas no sistema
		Scanner teclado = new Scanner(System.in);;
		String cargo = "";
		double salario = 0;  
		double salarioNovo = 0;  
		double diferenca = 0;  
		double percentual1 = 10;  
		double percentual2 = 20;  
		double percentual3 = 30;  
		double percentual4 = 40;  

		// Altere o while para "do while", dessa forma o código abaixo será executado antes da
		// verificação "salario != 0"
		do {
			// Faça a solicitação dos dados dentro do laço, caso contrário como vc digitará
			// o próximo salário para comparação?
			System.out.println("Digite o cargo do funcionário");  
			cargo = teclado.next();  
			System.out.println("Digite o salário do funcionário");  
			salario = teclado.nextDouble();  

			if(cargo.equals("Gerente")){  
				salarioNovo = salario+ (salario * (percentual1 / 100));       

			} else if (cargo.equals("Engenheiro")) {  
				salarioNovo = salario+ (salario * (percentual2 / 100));   

			} else if (cargo.equals("Técnico")) {  
				salarioNovo = salario+ (salario * (percentual3 / 100));   

			} else salarioNovo = salario+ (salario * (percentual4 / 100));    

			System.out.println("Salário antigo é: "+salario);  
			System.out.println("Novo salário é: "+salarioNovo);  
			System.out.println("A diferença é: "+(salarioNovo - salario));  
		} while ( salario != 0); // comparação do laço para verificar se será executado novamente ou não
	}
já tinha colocado pra fazer a solicitação dentro do laço, mas utilizava while e não o " do " então acontecia o mesmo problema.
Criado 7 de março de 2013
Ultima resposta 7 de mar. de 2013
Respostas 3
Participantes 3