Loopíng Eterno

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

[code] 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));
	}
	

	
	}

}

[/code]

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

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.

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
	}

[quote=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…

[code]
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
}

[/code][/quote] 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.