Solucionado (ver solução)
Solucionado
(ver solução)
17
respostas

Alguém poderia me explicar o parametro do metodo adiciona?

class Empresa {

    String nome;
    String cnpj;
    Funcionario[] funcionarios;

    void adiciona (Funcionario f) {
        for (int i = 0; i < funcionarios.length; i++) {
            if (funcionarios[i] == null) {
            this.funcionarios[i] = f;
            }else {
        continue;
        }
        }
    }
17 respostas

Funcionario é uma classe. Você passa um objeto desta classe como parâmetro.

Qual sua dúvida neste caso?

classe ou um tipo nesse caso do parametro?

classe ou um tipo nesse caso do parametro?

no caso eu pensei.. o metodo é adicionar.. dai o parametro seria o que se usa para adicionar, no caso, irei adicionar o que? o que seria necessario para isso, dai seria somente a variavel do tipo Funcionario que declarei em cima.. dai por isso coloco o tipo Funcionario e chamo a variavel.. mas por que nao chamo no caso empregados no parametro ?

Funcionário é um tipo, que poderia ser uma Classe ou uma Interface. Porém o método adiciona irá receber um objeto de uma classe Funcionario ou de uma outra Classe qualquer que implemente a Interface funcionário. Vou tentar exemplificar com código.

class Funcionario {

    String nome;
    Integer matricula;

    public Funcionario(String nome, Integer matricula) {
        this.nome = nome;
        this.matricula = matricula;
    }


    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public Integer getMatricula() {
        return matricula;
    }

    public void setMatricula(Integer matricula) {
        this.matricula = matricula;
    }
}

class Empresa {

    String nome;
    String cnpj;
    Funcionario[] funcionarios = new Funcionario[2]; // Pode adicionar até dois funcionários

    void adiciona(Funcionario f) {
        for (int i = 0; i < funcionarios.length; i++) {
            if (funcionarios[i] == null) {
                this.funcionarios[i] = f;
                return; // Se conseguir adicionar onde há espaço sai do método. Se não fizer isto, vai adicionar o primeiro funcionário em todo o array.
            } else {
                continue;
            }
        }
    }

    public Funcionario[] getFuncionarios() {
        return funcionarios;
    }

    public static void main(String[] args) {
        // Exemplo de uso
        Empresa empresa1 = new Empresa();

        Funcionario funcionario1 = new Funcionario("João", 1087);
        empresa1.adiciona(funcionario1);

        Funcionario funcionario2 = new Funcionario("José", 1089);
        empresa1.adiciona(funcionario2);

        for(Funcionario f : empresa1.funcionarios) {
            System.out.println("Matrícula: " + f.getMatricula() + " Nome: " + f.getNome());
        }
    }

}

Aqui tem um exemplo funcional do uso. Espero que ajude.

nao entendi muito bem o return! poderia me explicar?

e nesse caso aqui


class Empresa {
    Funcionario[] empregados;
    String cnpj;
    int livre = 0;

    void adiciona(Funcionario f) {
        this.empregados[this.livre] = f;
        this.livre++;
    }
}

o livre sendo igual a 0 seria o mesmo que ser null ?

Exemplo sem os getter e setters (provavelmente você irá aprender mais a frente junto com modificadores de acesso).

class Funcionario {

    String nome;
    Integer matricula;

    public Funcionario(String nome, Integer matricula) {
        this.nome = nome;
        this.matricula = matricula;
    }

}

class Empresa {

    String nome;
    String cnpj;
    Funcionario[] funcionarios = new Funcionario[2]; // Pode adicionar até dois funcionários

    void adiciona(Funcionario f) {
        for (int i = 0; i < funcionarios.length; i++) {
            if (funcionarios[i] == null) {
                this.funcionarios[i] = f;
                return; // Se conseguir adicionar onde há espaço sai do método. Se não fizer isto, vai adicionar o primeiro funcionário em todo o array.
            } else {
                continue;
            }
        }
    }

    public static void main(String[] args) {
        // Este método é o exemplo de uso
        Empresa empresa1 = new Empresa();

        Funcionario funcionario1 = new Funcionario("João", 1087);
        empresa1.adiciona(funcionario1);

        Funcionario funcionario2 = new Funcionario("José", 1089);
        empresa1.adiciona(funcionario2);

        for(Funcionario f : empresa1.funcionarios) {
            System.out.println("Matrícula: " + f.matricula + " Nome: " + f.nome);
        }
    }
}
solução!

Oi Taina, tudo bom?

Quando definimos uma classe, definimos o que ela TEM (que são os atributos) e o que ela FAZ (que são os métodos). Pensando na classe Empresa podemos ver o seguinte.

Uma Empresa TEM funcionarios, ou seja, funcionarios é um atributo da Empresa.

Pensando agora no que ela FAZ, ela consegue fazer a ação de adicionar um Funcionario.

Então queremos adicionar um Funcionario na Empresa, um cara novo, que ela não tem. Sempre que quisermos passar uma informação para um comportamento, passamos a informação como parâmetro.

Todo parâmetro no Java precisa ter um tipo e um nome único assim como as variáveis. No caso do método adiciona, você está dizendo que quer adicionar um Funcionario, daí o tipo do parâmetro, e precisa dar um nome, no caso f.

O Funcionario passado em f será adicionado aos funcionarios que a Empresa já possui.

Ficou mais claro?

Respondendo a sua outra dúvida: classe ou um tipo nesse caso do parametro?

Toda classe vira um tipo que pode ser utilizado para declarar variáveis, parâmetros, etc.

Abraço!

legal!

perfeito!!!!! =DD entendi agora muito bem.

No caso do return: Você tem uma lista de 1 a 2, Sendo assim você pode adicionar dois elementos na lista. Porém a maioria das linguagens tratam o índices do array comendo por 0. Neste caso você teria:

empregados[0] <= Primeiro elemento empregados[1] <= Segundo elemento

Na primeira vez que você chamar o método adiciona ele irá realizar o for para toda esta lista, porém todos os elementos estão null.

passa por: empregados[0], é igual a null. Adiciona o empregado na lista. passa por: empregados[1], é igual a null. Adiciona o empregado na lista.

Ou seja. Na primeira chamada vai preencher a lista com o mesmo empregado. Com o return, ao conseguir adicionar o primeiro elemento ele sai do método adiciona.

Taina,

O livre sendo igual a 0 quer dizer que você está inicializando o valor dele com 0 mas você pode mudá-lo a qualquer momento. Como este atributo é do tipo int, ele não consegue receber o valor null.

Só podem receber valor null tipos que não sejam primitivos. OBS: Os tipos primitivos são: short, int, long, float, double, char, byte, boolean).

Abraços!

joviane e edimar, obrigada a voces por me ajudar :) joviane, será que voce poderia me dar uma ajuda num assunto anterior a esse de array? porque eu fiz mas fiquei meio sem entender 100%. aquele da classe Data, sabe? para usar em todas as outras classes...

joviane, entao se eu colocar if empregados == null, nao daria?

Oi Taina,

O da classe Data segue a mesma ideia de passar o Funcionario para a Empresa.

Imagine que você queira colocar uma data de admissão na classe Funcionario e você tenha a seguinte classe Data:

class Data {
    int dia;
    int mes;
    int ano;

    Data(int dia, int mes, int ano) {
        this.dia = dia;
        this.mes = mes;
        this.ano = ano;
    }
}

Aí você precisa acrescentar um atributo do tipo Data pois o Funcionario TEM uma dataAdmissao. Sua classe Funcionario ficaria:

class Funcionario {
    Data dataAdmissao;
    String nome;
    // outros atributos

    Funcionario(String nome) {
        this.nome = nome;
    }
}

Na hora de colocar a dataAdmissao no Funcionario você precisa primeiro criar o objeto do tipo Data (através do new) e depois passar a referência deste objeto para o Funcionario. Ficaria assim o código com o main:

class TestaFuncionario {
    public static void main(String [] args) {
        Data dataDeHoje = new Data(15, 7, 2016);

        Funcionario taina = new Funcionario("Taina");
        taina.dataAdmissao = dataDeHoje;
    }
}

Deste jeito você consegue copiar a referência da dataDeHoje para o objeto referenciado pela variável taina.

Quanto a sua outra dúvida: entao se eu colocar if empregados == null, nao daria?

Dá sim! Você pode fazer tanto:

void adiciona (Funcionario f) {
    for (int i = 0; i < funcionarios.length; i++) {
        if (funcionarios[i] == null) {
            this.funcionarios[i] = f;
        } else {
            continue;
        }
    }
}

quanto:

void adiciona(Funcionario f) {
    if (this.livre < this.empregados.length) {
        this.empregados[this.livre] = f;
        this.livre++;
    }
}

Não tinha entendido sua dúvida anterior, as duas soluções funcionam, na segunda você só precisa verificar se ainda tem posições livres no array, conforme fiz acima.

Abraço!

Joviane,

obrigada, agora deu para entender :) então sempre que eu criar uma classe e depois utilizar o nome dela como o TIPO de um atributo criado em uma OUTRA classe, daí eu terei que instanciar, correto? Mas eu instancio sempre no main ou pode ser diretamente na classe?

e uma duvida, na classe funcionario, o metodo funcionario seria mesmo so para atribuit o nome funcionario ao nome da pessoa?

ola joviane,

olha esse codigo que eu estou fazendo.

    class Casa {

    String nome;
    Pessoa membrosFamilia[];
    Animal membrosPets;

    void adiciona(Pessoa x) {
        for(int i=0; i<membrosFamilia.length; i++) {
            if(membrosFamilia[i] == null) {
                this.membrosFamilia[i] = x;
            }else{
                continue;
            }

        }
    }

}


class Pessoa {
    String nome;
    int idade;

    void mostra(){
        System.out.println("Nome da pessoa: " + this.nome);
        System.out.println("Idade da pessoa: " + this.idade);
    }
}


class Animal {
    String nome;
    int idade;


    void mostra() {
        System.out.println("Nome do caozinho: " + this.nome);
        System.out.println("Idade: " + this.idade);
        System.out.println("Idade Humana:  " + this.idadeHumana());
    }

    int idadeHumana() {
        return this.idade = this.idade*7;
    }

}


class Principal {
    public static void main(String[] args) {

        Casa c1 = new Casa();
        c1.nome = "Moreira Lima";
        c1.membrosFamilia = new Pessoa[7];
        c1.membrosPets = new Animal();



        Pessoa p1 = new Pessoa(); // membros da família (pessoas)
        p1.nome="Taina";
        p1.idade=28;
        c1.adiciona(p1);

        Pessoa p2 = new Pessoa();
        p2.nome="Deborah";
        p2.idade=57;
        c1.adiciona(p2);

        Pessoa p3 = new Pessoa();
        p3.nome="Sergio";
        p3.idade=58;
        c1.adiciona(p3);

        Pessoa p4 = new Pessoa();
        p4.nome="Geisa";
        p4.idade=30;
        c1.adiciona(p4);



        Animal a1 = new Animal();    //animais
        a1.nome="Sofia";
        a1.idade=7;



        Animal a2 = new Animal();
        a2.nome="Boris";
        a2.idade=11;




    }
}

agora estou tentando adicionar os dois cachorros no array de membros da familia! ja criei o tipo la na classe casa. está certo assim? :) obrigada

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software