Dúvida Comparação de Strings Usando ArrayList

Galera estou tentando criar uma condição para comparar com a String do meu arraylist,
meio q tipo uma seleção eu vou citar a String e eu queria comparar se dentro do meu arraylist tem uma String com o mesmo nome, e esta dando erro ele pula para cliente não cadastrado mesmo eu sabendo q eu cadastrei um cliente com mesmo nome, pfv me ajudem…

public void ListarClientes(){
Iterator i = clientes.iterator();
System.out.println("\n\tCLIENTES CADASTRADOS\n");
while(i.hasNext()){
cliente = (Cliente)i.next();
System.out.println("CLIENTE "+(j+=1)+"º: “+cliente.getNome());
}
System.out.print(”\nSELECIONE O CLIENTE: ");
this.nome = new Scanner(System.in).nextLine().toUpperCase();
Iterator it = clientes.iterator();
while(it.hasNext()){
cliente = (Cliente)it.next();
if(cliente.getNome().equals(this.nome)){
this.nome = cliente.getNome();
break;
}
else{
System.out.println(“CLIENTE NÃO ESTÁ CADASTRADO”);
}
}

    j=0;
}

Qual o erro?

tipo ele só esta comparando a primeira posição da lista, se na posição tiver [0] =" Gabriel "; e na posição [1] = " JOÃO "; e eu colocar JOÃO o programa informa cliente não cadastrado.

Teu código está um tanto confuso.

Esse é o trecho de código onde você compara o tal valor lido com os que cadastrou.
Acontece que você tem um else que já informa que o cliente não foi cadastrado, mesmo sem ter sido verificada a lista toda.
Minha sugestão, crie uma variável Cliente e só valide após ler todos os elementos da lista

Cliente cli = null;
Iterator it = clientes.iterator();
while(it.hasNext()){
    cliente = (Cliente)it.next();
    if(cliente.getNome().equals(this.nome)){
        cli = cliente;
        break;
    }
}

Então

if(null == cli) {
    System.out.println("Cliente não cadastrado");
} else {
    System.out.println("Cliente: " + cli.getNome());
}
1 curtida

vou tentar, volto já com o resultado.

ta acontecendo o seguinte no primeiro laço se eu cadastrei cliente gabriel e selecionar ele, funciona de boa, agora quando vou selecionar outra vez e coloco um cliente que n tem na lista aparece cliente: gabriel .

Existe uma coisa chamada escopo de variável.
Isso é o que define onde e quando a variável é criada e, principalmente, em que partes (leia-se métodos) o valor atribuído a ela se mantém.

Posta o código todo (por favor, use o formatador do código, depois de colar o mesmo aqui, seleciona o código todo e clica no botão </> acima do editor)

1 curtida
package pedidos;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;


public class Sistema {
    Scanner teclado = new Scanner(System.in);

//LISTA PARA CLIENTES
ArrayList clientes = new ArrayList();
//LISTA PARA EDITORAS
ArrayList editoras = new ArrayList();
//LISTA PARA PEDIDOS
ArrayList pedidos = new ArrayList();


int es,j=0,cont=0,x=0;
String nome,nomeEdi;
Cliente cli = null;
//CLASSES INSTANCIADAS
Cliente cliente = new Cliente();
Editora editora = new Editora();
Pedido pedido = new Pedido();


//METODOS PERSONALIZADOS PARA CLIENTES
public void CadastrarClientes(){
    System.out.println("\n\tCADASTRO DE CLIENTES\n");
    do{
        cliente = new Cliente();
        System.out.print("NOME DO CLIENTE: ");
        cliente.setNome(new Scanner(System.in).nextLine().toUpperCase());
        System.out.print("TELEFONE: ");
        cliente.setTelefone(new Scanner(System.in).nextLine());
        System.out.print("DOCUMENTO: ");
        cliente.setDoc(new Scanner(System.in).nextLine());
        cont++;
        clientes.add(cliente);
    
        System.out.println("\n(0) ----SAIR\n(1) ----NOVO CLIENTE");
        System.out.print("OPÇÃO: ");
        es = teclado.nextInt();
        System.out.println("");
    }while(es!=0);
}
public void ListarClientes(){
    
    System.out.println("\n\tCLIENTES CADASTRADOS\n");
    j=0;
    Iterator i = clientes.iterator();
    while(i.hasNext()){
        cliente = (Cliente)i.next();
        System.out.println("CLIENTE "+(j+=1)+"º: "+this.cliente.getNome());
    }
    System.out.print("\nSELECIONE O CLIENTE: ");
    this.nome = new Scanner(System.in).nextLine().toUpperCase();
    for(Iterator it = this.clientes.iterator(); it.hasNext();){
        this.cliente = (Cliente)it.next();
        if(this.cliente.getNome().equals(this.nome)){
            cli = cliente;
            break;
        }
    }   
    if(null == cli){
        System.out.println("Cliente não cadastrado");
    }else{
        System.out.println("cliente: "+cli.getNome());
    }
}
//FIM DOS MÉTODOS PARA CLIENTES

//METODOS PERSONALIZADOS PARA EDITORA
public void CadastrarEditora(){
    System.out.println("\n\tCADASTRO DE EDITORAS\n");
    do{
        editora = new Editora();
        System.out.print("EDITORA: ");
        editora.setNomeEditora(new Scanner(System.in).nextLine().toUpperCase());
        editoras.add(editora);
        
        System.out.println("\n(0) ----SAIR\n(1) ----NOVA EDITORA");
        System.out.print("OPÇÃO: ");
        es = teclado.nextInt();
        System.out.println("");
    }while(es!=0);
    
}
public void ListarEditoras(){
    Iterator x = editoras.iterator();
    j=0;
    System.out.println("");
    while(x.hasNext()){
        editora = (Editora)x.next();
        System.out.println("EDITORA "+(j+=1) +"º: "+this.editora.getNomeEditora());
    }
    System.out.print("\nSELECIONE A EDITORA: ");
    this.nomeEdi = new Scanner(System.in).nextLine().toUpperCase();
    
    for(Iterator xy = this.editoras.iterator(); xy.hasNext();){
        this.editora = (Editora)xy.next();
        if(this.editora.getNomeEditora().equals(this.nomeEdi)){
            System.out.println("EDITORA CADASTRADA");
            break;
        }else{
            System.out.println("EDITORA NÃO CADASTRADA");
            
        }
        
        
    }
    
}
//FIM DOS MÉTODOS PARA EDITORAS

//MÉTODOS PERSONALIZADOS PARA PEDIDOS
public void RealizarPedido(){
    
    
        do{
            System.out.println("\nPEDIDO DO CLIENTE "+this.nome.toUpperCase());
            System.out.println("");
            pedido = new Pedido(); 
            pedido.setCodigo(x+=1);
            pedido.setEditora(this.nomeEdi);
            pedido.setCliente(this.nome);
            System.out.print("NOME DO LIVRO: ");
            pedido.setLivro(new Scanner(System.in).nextLine());
            System.out.print("QUANTIDADE DE LIVROS: ");
            pedido.setQtd(teclado.nextInt());
            pedidos.add(pedido);
        
            System.out.println("\n(0) ----SAIR\n(1) ----NOVO PEDIDO");
            System.out.print("OPÇÃO: ");
            es = teclado.nextInt();
            System.out.println("");
                }while(es!=0);
}
public void PedidosEmAndamento(){
    
    Iterator y = pedidos.iterator();
    System.out.println("\n\tPEDIDOS EM ANDAMENTO\n");
    while(y.hasNext()){
        pedido = (Pedido)y.next();
        System.out.println("CLIENTE "+pedido.getCliente());
        System.out.println("EDITORA "+pedido.getEditora());
        System.out.println("NOME DO LIVRO "+pedido.getLivro());
        System.out.println("CÓDIGO DO PEDIDO: "+pedido.getCodigo());
        System.out.println("");
    }
}
public void ListarPedidos(){
    Iterator y = pedidos.iterator();
    System.out.println("\n\tLISTA DOS PEDIDOS\n");
    while(y.hasNext()){
        pedido = (Pedido)y.next();
        System.out.println("EDITORA "+pedido.getEditora());
        System.out.println("NOME DO LIVRO "+pedido.getLivro());
        
        System.out.println("");
    }
    
}
//FIM DOS MÉTODOS PARA PEDIDOS 

}

essa é a classe sistema q criei, deixa eu te explicar, estou criando um programa pro projeto da faculdade e optei em um programa de fazer pedidos de livros, e nele preciso cadastrar os clientes cadastrar as editoras e fazer o pedido na hora de fazer o pedido quero selecionar o cliente para prosseguir, se o cliente não estiver cadastrado quero q o finalize e diga cliente não cadastrado e volte pro menu q criei na classe principal

Veja o que falei sobre escopo de variáveis.
Você declarou diferente do que sugeri. Assim sendo, se você não seta cli como null depois da primeira leitura, nunca vai funcionar direito.
Essa variável precisa ser local, obrigatoriamente, como eu sugeri

Muito obrigado man, me ajudou bastante, se não for muito incomodo pode me explicar detalhadamente oque esse comando Cliente cli = null esta fazendo neste código e tbm n entendi o if(null == cli)

public void ListarClientes(){
        Cliente cli = null;
        System.out.println("\n\tCLIENTES CADASTRADOS\n");
        j=0;
        Iterator i = clientes.iterator();
        while(i.hasNext()){
            cliente = (Cliente)i.next();
            System.out.println("CLIENTE "+(j+=1)+"º: "+this.cliente.getNome());
        }
        System.out.print("\nSELECIONE O CLIENTE: ");
        this.nome = new Scanner(System.in).nextLine().toUpperCase();
        for(Iterator it = this.clientes.iterator(); it.hasNext();){
            this.cliente = (Cliente)it.next();
            if(this.cliente.getNome().equals(this.nome)){
                cli = cliente;
                break;
            }
        }   
        if(null == cli){
            System.out.println("Cliente não cadastrado");
        }else{
            System.out.println("cliente: "+cli.getNome());
        }
    }

Declaração do objeto cli da classe Cliente, definido como null (necessariamente, não é preciso definir o valor de um objeto como nulo, ainda mais que iremos fazer uma verificação no mesmo).

Aqui eu apenas verifico se o valor do objeto cli foi alterado, considerando que ele foi declarado como nulo, se o mesmo sofreu alteração, essa comparação retorna false e, por isso, apresenta o nome do cliente.
Lembre-se, quando você usou a variável com o escopo da classe, você teve problemas, pois, na segunda execução, tinha um valor definido para ela. Agora, com essa abordagem, você só terá o valor enquanto aquele método estiver sendo executado.

2 curtidas

deixa eu ver se entendi bem, declarando o objeto cli da classe Cliente e definindo como null,
quer dizer q o objeto vai ser todo preenchido com null.

for(Iterator it = this.clientes.iterator(); it.hasNext();){
            this.cliente = (Cliente)it.next();
            if(this.cliente.getNome().equals(this.nome)){
                cli = cliente;
                break;
            }
        }   

mais como o eu tou fazendo uma comparação de String na condição if acima, e dps atrbuindo
os dados q foram verdadeiros no objeto cli e assim preenchendo o objeto com os nomes que tiveram comparação como verdadeira, sendo assim se eu tiver 2 nomes verdadeiros q entraram nessa condição e um nome foi falso vai para as outras condição, um exemplo:
"GABRIEL", "DARLAN", NULL
sendo assim ele verifica se os nomes é verdadeiro , se n for verdadeiros ele atribui o valor null.

supondo q eu selecione um cliente que não esteja cadastrado ex JOÃO, ele irá atribuir no objeto cli como JOÃO == null e irá informar "Cliente não cadastrado".

é mais ou menos assim??

Não.
Você cria o objeto cli como nulo.
Aí você tem 2 possibilidades: se o nome a ser pesquisado consta na lista, o valor da variável cli é alterado para aquele cliente com o nome procurado.
Ou, se não existe nenhum cliente com aquele nome, ele se mantém nulo.
A validação, após o laço, é para certificar que cli é ou não nulo e de acordo com cada situação, imprimir algo.

1 curtida

agora eu entendi, mt obrigado cara, deus te abençoe !!