If-else [RESOLVIDO]

Srs, venho mais uma vez pedir a colaboração de vocês. O método “demite-linhas 110 a 126” na classe abaixo deveria imprimir “ativo” caso o usuário digite 1 e “demitido” caso digite 2 e ele está rodando as 2 opções. Já tentei de todas as formas mas não sei aonde estou errando. Alguém poderia me ajudar ? Estou começando a estudar a linguagem e as vezes aparecem alguns obstáculos que não consigo identificar aonde estão.
Mais uma vez agradeço.

import javax.swing.JOptionPane;

public class Funcionario
{
       //atributos
       private String nome;
       private String depto;
       private double salarioInicial;
       private String admissao;
       private String cpf;
       private String status;

       //construtor
       public Funcionario(String nm, String setor, double salIni, String adm, String ident, String sit)
       {
               nome = nm;
               depto = setor;
               salarioInicial = salIni;
               admissao = adm;
               cpf = ident;
               status = sit;
       }

       public void setNome(String nm)
       {
               nome = nm;
       }

       public String getNome()
       {
               return nome;
       }

       public void setDepto(String setor)
       {
               depto = setor;
       }

       public String getDepto()
       {
               return depto;
       }

       public void setSalarioInicial(double salIni)
       {
               salarioInicial = salIni;
       }

       public double getSalarioInicial()
       {
               return salarioInicial;
       }

       public void setAdmissao(String adm)
       {
               admissao = adm;
       }

       public String getAdmissao()
       {
               return admissao;
       }

       public void setCpf(String ident)
       {
               cpf = ident;
       }

       public String getCpf()
       {
               return cpf;
       }

       public void setStatus(String sit)
       {
               status = sit;
       }

       public String getStatus()
       {
               return status;
       }

       public void newFuncionario()
       {
               nome = JOptionPane.showInputDialog(null,"Digite nome do funcionario: ");
               depto = JOptionPane.showInputDialog(null,"Digite departamento: ");
               admissao = JOptionPane.showInputDialog(null,"Digite a data de admissao: ");
               cpf = JOptionPane.showInputDialog(null,"Digite CPF: ");
               salarioInicial = Double.parseDouble(JOptionPane.showInputDialog(null,"Digite salario em R$ "));
       }
       
       double percentual = 0.0;
       
       public void bonifica()
       {

               percentual = Double.parseDouble(JOptionPane.showInputDialog(null,"Digite percentual de reajuste: "));
               
               if(percentual > 0.0)
               {
                       salarioInicial = salarioInicial + (salarioInicial * (percentual/100));
                       JOptionPane.showMessageDialog(null,"Salario atualizado: " + salarioInicial);
               }
                       else

                       JOptionPane.showMessageDialog(null,"Salario nao foi corrigido. Valor de R$ " + salarioInicial + " permanece");
       }
                  
       public void demite()
       {       
       	       int status = 0;
       	              	             	             	       
       	       JOptionPane.showInputDialog(null,"Digite status - (1) para Ativo ou (2) para Demitido: ");
       	                                      
               if(status != 2)
               {
               	       JOptionPane.showMessageDialog(null,"Funcionario ativo");
                              	       
               	      //else
               	      	if(status != 1)
               
               	      	      	      JOptionPane.showMessageDialog(null,"Funcionario demitido");
       		      
       	       }      	       	       	               
       }
       
       public void mostra()
       {
       	       JOptionPane.showMessageDialog(null,"NOME: " + this.nome + "\nDEPTO: " + this.depto + "\nSALARIO: " + this.salarioInicial + 
       	       	       "\nADMISSAO: " + this.admissao + "\nCPF: " + this.cpf);
       	              	       
       }

}

public class FuncionarioTest
{
       public static void main (String args [] )
       {

               Funcionario func1 = new Funcionario("","",0.0,"","","");
                              
               func1.newFuncionario();
               func1.bonifica();
               func1.demite();
               func1.mostra();
               
               Funcionario func2 = new Funcionario("","",0.0,"","","");
               
               func2.newFuncionario();
               func2.bonifica();
               func2.demite();
               func2.mostra();
               
               System.exit(0);//finaliza o aplicativo

       }

}

Você está fazendo a pergunta com o JOptionPane, mas não está guardando a resposta na variável status. Outra coisa, faça o teste da maneira mais direta possível.

[code]public void demite()
{
int status = 0;
while (status == 0) {
try {
status = Integer.parseInt(JOptionPane.showInputDialog(null,"Digite status - (1) para Ativo ou (2) para Demitido: "));
catch (NumberFormatException e) {}
status = 0;
}
}

if(status == 1) {
JOptionPane.showMessageDialog(null,“Funcionario ativo”);
} else if(status == 2) {
JOptionPane.showMessageDialog(null,“Funcionario demitido”);
}
}[/code]

O valor de status é sempre zero pois você não atribuiu um valor a ela, o certo é

status = Integer.parseInt(JOptionPane.showInputDialog(null,"Digite status - (1) para Ativo ou (2) para Demitido: ")); 
if (status == 1) {
//caso seja 1
} else if (status == 2) {
//caso seja 2
}

Voce inicializou a variável status = 0 … e no JOptionPane voce esqueceu de armazenar o resultado nessa variável… ou seja, ela está sempre como 0… por isso imprime os dois casos, pis 0 != 2 , e 0 != 1 … é só guardar o valor do JOptionPane na variável…

Ah, e não esqueça de fazer as verificações com try/catch ou if/else pra ver se o usuário realmente digitou um número…

edit: novamente todo mundo respondendo ao mesmo tempo… tá virando rotina já… =D

Boa tarde

Já que vc só tem 2 opções pq ao invés desse segundo if ai vc nao passa direto o else, pois se não for 1- Ativo então fatalmente será 2- Demitido, do jeito que esta tem um if dentro do outro.

Att.

Como disseram não foi atibuido o valor do status.

public void demite(){
		int status = 0;                                                                 
        status = JOptionPane.showInputDialog(null,"Digite status - (1) para Ativo ou (2) para Demitido: ");                                                
        switch(status){
			case 1:
				JOptionPane.showMessageDialog(null,"Funcionario ativo");
				break;
			case 2:
				JOptionPane.showMessageDialog(null,"Funcionario demitido");
				break;
			default:
				JOptionPane.showMessageDialog(null,"Status invalido ->"+status);
				break;
				}
}

Srs, agradeço muito a colaboração.

Existem muitos detalhes que só praticando conseguimos solucionar e sem o fórum não conseguiria resolver. Mesmo na base da tentativa e erro é ruim pq vc acaba acertando mas não sabe o que fez.

Um abraço a todos.

.

Entre as linhas 110 e 126 não há else if. Há um if dentro de outro if.

Ou seja:

Se status diferente de 2
imprime "Funcionário Ativo"
se for TAMBÉM diferente de 1
imprime “Funcionário Demitido”

if(status != 2){ System.out.println("Funcionario Ativo"); if(status != 1) { System.out.println("Funcionario Demitido"); } }
Acho que o que quer é:
Se status diferente de 2
imprime "Funcionário Ativo"
Senão se for diferente de 1
imprime “Funcionário Demitido”

if(status != 2){ System.out.println("Funcionario Ativo"); } else if(status != 1) { System.out.println("Funcionario Demitido"); }

da forma como está escrito fica muito estranho pois se decidir adicionar um ou vários Status novos (3 - Afastado) por exemplo, teria problemas na manutenção do código…