Criar um for de condições || [RESOLVIDO]

11 respostas
Pedrosa

Galera estou quebrando a cabeça, como fazer um for de condições || de um if?

O caso é o seguinte:

if(((CallControlCall)eventList[i].getCall()).getCalledAddress().getName() == address.getName() || ((CallControlCall)eventList[i].getCall()).getCalledAddress().getName().equals(getLogin())){

Preciso que esse for se encaixe no if de cima, cada linha seria equivalente a um ||, qual a melhor maneira de fazer?

try {
    LoginDAO login = new LoginDAO();
    for(Iterator iter = login.getLoginGrupo(getLogin()).iterator(); iter.hasNext();){
       ((CallControlCall)eventList[i].getCall()).getCalledAddress().getName().equals(iter.next());
    }
} catch (Exception e) {
    e.printStackTrace();
}

11 Respostas

Mantu

Que tal criar um método privado que retorna boolean? Na condição do for, vc analisa o retorno do método:

for(...;continuaFor(...);...){...}
Pedrosa

Já estou dentro de um método que recebe uma lista de eventos, em uma certa condição eu obtenho esses eventos e preciso compará-los, qual parte eu isolaria em outro método?, não ficou muito claro.

public void callChangedEvent(CallEv[] eventList){
    for(int i = 0; i < eventList.length; i++) {
         switch(eventList[i].getID()) {
                case xpto:
                //faço o que preciso 
         }
    } 
}
Mantu

Desculpa… agora entendi… acho…
Pelo que eu entendi, vc tá iterando sobre um array de eventos, e cada posição desse array é usado em um OU, certo?
tenta fazer assim

boolean cond = false;
...
for(...){
	...
	cond = cond || <sua condição que usa a posição i do array de eventos>;
	...
}

Será que era isso? Se não for, poste mais, ok?

Pedrosa

Então ficaria mais ou menos assim?

try {
boolean cond = false;
LoginDAO login = new LoginDAO();
for(Iterator iter = login.getLoginGrupo(getLogin()).iterator(); iter.hasNext();){
   cond = cond || ((CallControlCall)eventList[i].getCall()).getCalledAddress().getName().equals(iter.next());
    if(((CallControlCall)eventList[i].getCall()).getCalledAddress().getName() == address.getName() ||  ((CallControlCall)eventList[i].getCall()).getCalledAddress().getName().equals(getLogin())||(cond = true)){
nicoweda

Eu tava olhando e naum entendi uma passagem do codigo… você realemente tá comparando a referencia desses objetos ou você queria comparar os valores???

if(((CallControlCall)eventList[i].getCall()).getCalledAddress().getName()== address.getName()

Na realidade não seria melhor utilizar assim?

if(((CallControlCall)eventList[i].getCall()).getCalledAddress().getName().equals(address.getName())

Desculpe pela intromissão…
Abraços…

Mantu

Não, ficaria mais ou menos assim (Atentando também para o que o nicoweda postou):

boolean cond = false;
LoginDAO login = new LoginDAO();
for(Iterator iter = login.getLoginGrupo(getLogin()).iterator(); iter.hasNext();){
	cond = cond || ((CallControlCall)eventList[i].getCall()).getCalledAddress().getName().equals(address.getName() ) || ((CallControlCall)eventList[i].getCall()).getCalledAddress().getName().equals(getLogin())
}
if(cond){
	//Faça o que deve ser feito....
}
Pedrosa

Poderia usar o contains? ao invés de fazer esse for algo assim, pois ele retorna um boolean.

List lista = login.getLoginGrupo(getLogin());
System.out.println("QUEM " + ((CallControlCall)eventList[i].getCall()).getCalledAddress().getName());
if(((CallControlCall)eventList[i].getCall()).getCalledAddress().getName() == address.getName() || 
((CallControlCall)eventList[i].getCall()).getCalledAddress().getName().equals(getLogin())||
(lista.contains(((CallControlCall)eventList[i].getCall()).getCalledAddress().getName()))
){
Mantu

Depende da lógica que rege seu programa… Teria como vc me dizer, textualmente o quê vc tá querendo procurar ou validar? Acho que assim fica mais fácil pra chegarmos em uma solução.

Pedrosa

Vamos lá, estou recebendo ligações nesse evento, que podem ser para o número do ramal, para o login da pessoa ou grupos que essa pessoa pertence.

Ex alguém ligou para o login 14276, pode atender
ou ligou para ramal, 3331 pode atender
ou ligou para um dos seus grupos, que podem ser 3000,4000,5000 etç.

Essa minha lista retorna:

3000
4000
5000

So que eu fiz o teste assim:

System.out.println("lista contains de um ramal " + lista.contains(((CallControlCall)eventList[i].getCall()).getCalledAddress().getName()));
System.out.println("lista contains de um grupo " + lista.contains("4000"));

E as 2 linhas retornaram false, sabendo que esse 4000 da segunda linha existe na lista.

Mantu

Estranho… Essa lista é uma collection de quê? Por que se não for de String, aí vai retornar false mesmo. Agora, se for de String, o buraco é mais em baixo… talvez seja melhor darmos uma olhada no código do método ou da classe… Derrepente pode ser algum problema com o fluxo do programa.
Veja aí se lista armazena Strings mesmo. Se não, poste (ou anexe) o código, ok?

Pedrosa

Era isso mesmo cara, muito obrigado, meu método jogava um int na lista, troquei por String e deu certo, 5 estrelas!

Criado 4 de setembro de 2006
Ultima resposta 5 de set. de 2006
Respostas 11
Participantes 3