laço for em Java

10 respostas
G

…estou estudando Java…dúvidas “lógica”…

Quando sei que é preciso usar um for em um arrayList de objetos?

10 Respostas

D

Oi, bom dia!

Você usa um loop for em um ArrayList por vários motivos:
[list]quando deseja recuperar um objeto da lista por seu atributo.[/list][list]quando deseja percorrer todos os objetos e recuperar atributos.[/list][list]etc…[/list]

Exemplo 1

//recuperar um objeto da lista por seu atributo
public Cliente getClientePorCPF( String cpf ) {

for (Cliente cli : listaClientes) {   //no exemplo: listaClientes é um ArrayList <Cliente>, ou seja uma lista utilizando Generics
    if (cli.getCpf().equals(cpf))
         return cli;
}

}

Exemplo 2

//detectar objetos Pedidos onde estejam com pendência de entrega
public ArrayList getPedidosPendentes( ) {

ArrayList pedidosPendentes = new ArrayList();

for (int i = 0; i < listaPedidos.size(); i++) {   //listaPedidos é um ArrayList comum

    Pedido pedido = (Pedido) listaPedidos.get(i);

    if (pedido.isPendente() == true)
         pedidosPendentes.add(pedido);

}

return pedidosPendentes;

}
G

Qual a diferença?

for (Cliente cli : listaClientes){}

de

for (int i = 0; i < listaPedidos.size(); i++) {}

R

O primeiro for é chamado de for otimizado e geralmente é utilizado para percorrer Arrays, já o segundo pode ser utilizado pra todo e qualquer tipo de repetição.

D

No primeiro for você não sabe em qual repetição você está… :slight_smile:
(por mais que é fácil implementar isso através de uma variável)

G

for (Cliente cli : listaClientes){}

esse for é mais fácil de entender mesmo não sabendo em qual posição está...

for (Cliente cli : listaClientes) {   //no exemplo: listaClientes é um ArrayList <Cliente>, ou seja uma lista utilizando Generics  
   if (cli.getCpf().equals(cpf))  
         return cli;  
 }  
   
 }

duvida ++;

....Por que usou o if dentro do for??? no meu entendimento usou o if para verificar se o CPF são iguais para cada cliente da lista??? minha reposta é true ou false?

D

Esse funciona assim:

Olhe todos os clientes da listaClientes e veja se o cpf deles é igual a xxx.xxx.xxx-xx, se for igual, retorne esse cliente :smiley:

R
gisa_screen:
for (Cliente cli : listaClientes) {//Para cada elemento do conjunto 'listaClientes' insira o próximo elemento no objeto do tipo Cliente 'cli'
   if (cli.getCpf().equals(cpf))  //Se, a variável CPF desse elemento for igual a CPF
         return cli;  //Retorne esse cliente
 }  
   
 }
É exatamente isso que está escrito acima...
G

Obrigada pelas respostas, ajudou a esclarecer minhas dúvidas!

R

Tenho uma curiosidade sobre o for, não quis iniciar outro tópico aproveitei o assunto aqui:
seguinte, tenho 2 laços for, no incremento um utilizo pre-incremento e no outro pos-incremento, só que a saída é a mesma nos dois casos,
tenho minha opnião mas gostaria de outras para ter exclarecimento.
segue o código:

public class Bunnies {

    public static void main(String[] args) {


        for (int i = 0; i < 3; i++) {
            System.out.print(i + " ..");
        }
       
        for (int i = 0; i < 3; ++i) {
            System.out.print(i + " ..");
        }
      
    }
}

os dois tem a saída:

0 ..1 ..2 ..
0 ..1 ..2 ..
J

acho melhor o for tradicional

Criado 26 de janeiro de 2011
Ultima resposta 13 de set. de 2013
Respostas 10
Participantes 6