e operador não funcionando quando usado no bloco de identificação de outra pessoa

StackOverflow https://stackoverflow.com/questions/20353906

  •  25-08-2022
  •  | 
  •  

Pergunta

Eu tenho um bloco de código, que verifica o status verificado da caixa de seleção e exibe o valor de acordo, mas no meu código eu tenho um lugar onde tenho que usar a declaração como

if (cb1.isChecked()) {
a="abc";        
} 

else if(cb1.isChecked() && cb2.isChecked()) {
a="pqr";
}

else if(cb2.isChecked()){
a="asd";
}

else{
a="xyz";
}

Recebo os valores se a caixa de seleção ou a caixa de seleção for selecionada, mas quando as duas caixas de seleção forem selecionadas, obtenha resultado como "ABC" apenas

Alguma ideia do que há de errado com o código ??

Foi útil?

Solução

Isso é porque é um else if ao invés de ifs. Uma vez que o primeiro está satisfeito, ele não está verificando os outros. Altere a ordem em que você verifica. Então, algo como

if (cb1.isChecked() && cb2.isChecked()) {
    a="abc";        
} 
else if(cb1.isChecked()) {
    a="pqr";
}   
else if(cb2.isChecked()){
    a="asd";
}   
else{
    a="xyz";
}

Outras dicas

Mudar para:

if(cb1.isChecked() && cb2.isChecked()) {
a="pqr";
}

else if (cb1.isChecked()) {
a="abc";        
} 

else if(cb2.isChecked()){
a="asd";
}

else{
a="xyz";
}

No seu código, se o CD1 fosse verificado, ele não entraria mais no Else.

Em uma escada se outra, apenas um bloco será executado, você deve fazer isso como o seguinte:

if (cb1.isChecked()) {
    a = cb2.isChecked() ? "pqr" : "abc";       
} else if(cb2.isChecked()){
    a="asd";
}
else{
    a="xyz";
}

OU

if(cb1.isChecked() && cb2.isChecked()) {
    a="pqr";
}
else if (cb1.isChecked()) {
    a="abc";        
} 
else if(cb2.isChecked()){
    a="asd";
}
else{
    a="xyz";
}

Com mais se ele não for, ele entra no primeiro se ele não entrar no resto deles, apenas pegue o else e o usuário apenas se e funciona

Modificar primeiro se condição para

if (cb1.ischecked () &&! cb2.ischecked ())

Atualmente, já que o primeiro se as condições depende apenas do valor do CB1, o controle entra no primeiro bloco.

O controle nunca entra no segundo bloco na atual lógica.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top