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.