Dúvida Arrays: inserindo e removendo vetores

Oi pessoal, bom dia, tudo bem?

Baixei um livro da Caelum: Java e Orientação a Objetos, e lá fiquei sabendo do GUJ.

Esse é o meu primeiro post, me ajudem a montar o post, por favor… imagino que seja possível editar, então aceito sugestões e dicas, obrigado :grimacing:

Então, vamos lá…

Tenho um projeto pronto aqui mas não to entendendo duas coisas:

método insereEmpregado(Empregado emp):

public boolean insereEmpregado(Empregado emp) {
		if (pos > this.empregados.length){
			return false;
		}else{
			this.empregados[pos] = emp;
			pos++;
			return true;
		}
	}

método removeEmpregado(int idx):

public boolean removeEmpregado(int idx) {
		if (pos == 0 || idx < 0){
			return false;
		}else{
			Empregado tempEmpregado[] = new Empregado[this.empregados.length];
			int j = 0;
			for (int i = 0; i < pos; i++){
				if (i != idx){
					tempEmpregado[j] = this.empregados[i];
					j++;
				}
			}
			this.empregados = tempEmpregado;
			pos--;
			return true;
		}
	}

início da classe pra ajudar vocês a me ajudar :laughing:

public class FolhaDePagamento {
	private Empregado []empregados;
	private int pos = 0;
	
	public FolhaDePagamento(int nEmp){
		super();
		empregados = new Empregado[nEmp];
		
	}

Enfim, o que peço é: vocês podem me comentar e explicar o que tá acontecendo em mínimos detalhes nos dois métodos?

Muito obrigado :grin:

public boolean insereEmpregado(Empregado emp) {
    if (pos > this.empregados.length) { // se o atributo 'pos' é maior que o comprimento do array 'empregados'
        return false; // encerra a execução desse método retornando 'false' para quem o chamou
    } else { // senão
        this.empregados[pos] = emp; //  a posição 'pos' do array 'empregados' recebe o parâmetro 'emp'
        pos++; // o atributo 'pos' é incrementado
        return true; // encerra a execução desse método retornando 'true' para quem o chamou
    }
}

public boolean removeEmpregado(int idx) {
    if (pos == 0 || idx < 0) {  // se o atributo 'pos' for igual à 0 ou o parâmetro 'idx' for menor que 0
        return false; // encerra a execução desse método retornando 'false' para quem o chamou
    } else { // senão
        Empregado[] tempEmpregado = new Empregado[this.empregados.length]; // cria um array temporário chamado 'tempEmpregado' que tem o mesmo comprimento do array 'empregados'
        int j = 0; // cria uma variável 'j' e inicializa ela com 0
        for (int i = 0; i < pos; i++) { // um laço com 'i' inicializando em 0 e repete enquanto 'i' for menor que o atributo 'pos', incrementa 'i' a cada iteração 
            if (i != idx) { // se 'i' for diferente do parâmetro 'idx'
                tempEmpregado[j] = this.empregados[i]; a posição 'j' do array 'tempEmpregado' recebe o conteúdo da posição 'i' do array 'empregados'
                j++; // a variável 'j' é incrementada
            }
        }
        this.empregados = tempEmpregado; // o array 'empregados' é substituído pelo array 'tempEmpregado'
        pos--; // o atributo 'pos' é decrementado
        return true; // encerra a execução desse método retornando 'true' para quem o chamou
    }
}
1 curtida

Post que ajuda os novatos! E bem vindo ao GUJ!

1 curtida

Muito obrigado pelo teu tempo! Ficou muito mais claro o que tá acontecendo no código.

Porém, um pouco confuso ainda:

porquê foi criado um array temporário? qual a necessidade?
e, ele tem o mesmo tamanho do array Empregados pra poder colocar o valor do tempEmpregado nele depois?

@smatt obrigado pela sugestão, já li e certamente vou usar no meu próximo post :sweat_smile:

1 curtida