Ajuda melhor maneira

2 respostas
L

Estou fazendo uma busca em um array. fiz o codigo seguinte

private int getIndice(String cpf) throws ClienteNaoEncontradoException {
    for (int i = 0; i < indice; i++) {
        if (this.cliente[i].getCpf().equals(cpf)) {
            return i;
        }
    }
        
    throw new ClienteNaoEncontradoException(cpf);        

}

Minha duvida eh a seguinte:
Eh correto colocar um return ali dentro do laco ou soh devo retornar alguma coisa somente quando chego no final do metodo?
Se esta nao for a melhor manera de se resolver este problema como seria possivel resolver?
Este metodo retorna a posicao que o cpf esta no array…

2 Respostas

abreumania

Eu retornaria um valor inválido tipo -1, acho que exceção serve para tratamento de erro, e não de lógica.

E sendo um Array, você fica limitado a ter que percorre lo para achar o cliente com o cpf informado.

Não tem o que melhorar dai.

R

Código de erro para retorno é coisa de programação estruturada. O correto é levantar exceção mesmo.

Você poderia implementar o método assim:
(para isso, precisaria que a classe Cliente implementasse Comparable e o método compareTo(); sobrescrevesse o método equals(), ambos utilizando o getCpf(); e o array deveria estar ordenado)

private int getIndice(String cpf) throws ClienteNaoEncontradoException {
    Cliente clienteFiltro = new Cilente(cpf);//supondo que há um construtor que recebe o cpf.
    int retorno = Arrays.binarySearch(this.cliente, clienteFiltro);

    if(retorno < 0) {
        throw new ClienteNaoEncontradoException(cpf);
    }

    return retorno;
}

ou assim (sem precisar mudar a classe Cliente):

private int getIndice(String cpf) throws ClienteNaoEncontradoException {
    int retorno = -1;

    for (int i = 0; i < indice; i++) {
        if (this.cliente[i].getCpf().equals(cpf)) {
            retorno = i;
            break;
        }
    }
        
    if(retorno == -1) {
       throw new ClienteNaoEncontradoException(cpf);        
    }

    return retorno;
}
Criado 5 de outubro de 2007
Ultima resposta 5 de out. de 2007
Respostas 2
Participantes 3