Duvida com metodos de preencher array

Olá! Estou começando a trabalhar com arrays mas ainda nao peguei o jeito. Tenho que fazer uma lista de uma simulação simplificada de sistema de poupança de um banco. Tenho as classes Agencia, Dependente e a classe PoupancaSaude que extende a classe Poupanca. Na PoupancaSaude tenho que criar uma array de objeto de tipo Dependente (que é um dos atributos privados). Até aí tudo bem. Mas há um método que estou tendo problemas que é o +insereDependente. Ele pede assim: recebe, via parâmetro, um objeto do tipo Dependente, insere-o no array de dependentes em alguma posição livre e retorna true. Se não houver posições livres no array, retornar false para indicar o insucesso da operação. No caso para preencher a array devo inserir um contador para a mostrar a quantidade e um if para retornar as posições? Obrigada.

Sim, basicamente isso. Se está com problema nessa parte, mostre seu código e explique por que ele não funciona do jeito que deveira.

Abraço.

Dei uma arrumada e agora está compilando porém não sei se fiz da forma correta:

public boolean insereDependente(Dependente dependente){
    int cont = 0;
    for (int i = 0; i < dependentes.length; i++)
        if (dependentes[i].getNome().equalsIgnoreCase(cliente)) {
            return true;
        }
        return false;
}

(cliente sendo uma string de nome)

Pelo que entendi não acho que seja necessário um contador, pois você não mencionou se seu array é limitado ou não, outro ponto e que é melhor trabalhar com coleções ao se manipular objetos. Implementei uma solução um pouco diferente e mais usual para o seu problema.

public class PoupancaSaude {

private Collection<Depedente> depedentes = new ArrayList<>();

public boolean insereDepedente(Depedente depedente) {
	 
	if (depedentes.add(depedente)) {
		return true;
	} else {
		return false;
	}
}

Nesse casso o próprio metodo add retorna um boolean, sem a necessidade de criar um contador para verificar.

Você inverteu o retorno: se já houver um dependente com este nome, deve retornar false. Senão, insere e retorna true. Não vejo onde você inicializou a variável cliente, então não dá pra entender e avaliar seu código. E sua variável cont não está sendo usada.

Note que a precisa de duas etapas: verificar se há espaço para inserir mais um dependente e verificar se não é duplicado. A inserção depende destas duas condições serem falsas.

Se Dependente é uma classe completa com um atributo nome e um método getNome(), você precisa usar esse método na comparação do dependente que está sendo inserido. Supondo que dependentes é um array de tamanho 10, você pode garantir na exclusão que os elementos sejam reposicionados (ou seja, num array com três dependentes, se o segundo é removido, o terceiro passa para a segunda posição e a terceira posição passa a ser nula). Com isso, na inserção, você pode fazer algo como:

public boolean insereDependente(Dependente dependente){

  for(int i = 0; i < dependentes.length; i++){

    if (dependentes[i] == null){ // se estamos numa posição nula, então podemos inserir o dependente
      dependentes[i] = dependente; // a posição que era nula recebe o novo dependente
      return true; // conseguiu inserir, retorna true
    }else if (dependentes[i].getNome().equalsIgnoreCase(dependente.getNome()){
      return false; // nome duplicado, não pode inserir
    }
  }
 
  // se percorreu todo o array e não encontrou uma posição vazia (null)
  // então retorna false, pois não conseguiu inserir
  return false;
}

Se na exclusão você não garantir o reposicionamento dos elementos, precisa verificar separadamente a presença de uma posição nula e de dependentes duplicados.

[quote=“AlexAdriano, post:5, topic:350149”]Pelo que entendi não acho que seja necessário um contador, pois você não mencionou se seu array é limitado ou não, outro ponto e que é melhor trabalhar com coleções ao se manipular objetos.
[/quote]

Sendo um exercício, acredito que a ideia não era usar Collections, mas sim arrays de Dependente, pois senão a verificação de tamanho não faz muito sentido (um ArrayList pode conter milhares de registros sem problemas).

Abraço.

1 curtida