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

Código não compila

Ao não atribuir uma data para o Funcionario, o código não compila, dando o seguinte erro:

TestaFuncionario.java:8: error: method preencheData in class Data cannot be applied to given types;
                f1.dataDeEntrada.preencheData();
                                ^
  required: int,int,int
  found: no arguments
  reason: actual and formal argument lists differ in length
1 error
class TestaFuncionario {
    public static void main(String[] args) {
        Funcionario f1 = new Funcionario();
        f1.nome = "Mariana";
        f1.departamento = "Desenvolvimento";
        f1.salario = 100;
        f1.dataDeEntrada = new Data();
        f1.dataDeEntrada.preencheData();
        f1.rg = "35225287";

        f1.recebeAumento(50);

        f1.mostra();
    }
}
8 respostas
solução!

Já descobri o erro, na realidade, no método preencheData eu tive que tirar os parâmetros int dia, int mes, int ano.

Isso porque ele reclama se passar parâmentro vazio e o método que estou chamando tem parâmetros.

Removi os parâmetro do método da classe Data e compilou, inclusive com a data 0/0/0.

Thiago mostra ai como ficou o código porque o meu não funfou!

Bom dia Pablo, tudo bem?

Manda seu código para vermos como está, assim fica mais fácil :)

Boa noite Thiago! Tudo sim e contigo? Obrigado por responder. Meu código ficou assim:

// Classe principal.
class Funcionario6 {

    // Atribuições da classe.
    Pessoa titular;
    double salario;
    Data dataDeEntrada; // Setando esta classe a classe Data.

    // Criando um metodo para automatizar o SOP fazendo o uso do this. para pegar automaticamenteo o usuario de que se trata quando uso f1.mostra(); por ex.
    void mostra(){

        System.out.println("O " + this.titular.nome + " ganha " + this.salario + " R$, e nasceu em: " + this.dataDeEntrada.dia + "/" + this.dataDeEntrada.mes + "/" + this.dataDeEntrada.ano);
        System.out.println("===========================================================");    
    }
}

class Pessoa {

    String nome;

}


class Data{ // Criando a classe Data que recebe dia, mês e ano.

    int dia;
    int mes;
    int ano;

    void preencheData(int dia, int mes, int ano){ // Ao inves de ter que digitar f1.dataDeEntrada.dia = 01, por ex, eu automatizo isso para uma unica linha
                                                  // Usando assim o f1.dataDeEntrada =  new Data(); aqui chamo a função, e em seguido digo que vou acrescentar
                                                  // Os valores a função, parecido com um aray, uso f1.dataDeEntrada.preencheData(20, 02, 1988);
        this.dia = dia;
        this.mes = mes;
        this.ano = ano;

    }

}

class Programa6 {

    public static void main(String[] args){

        Funcionario6 f1 = new Funcionario6();

            f1.salario = 5000;

            f1.titular = new Pessoa(); // Quando vou usar uma classe que está linkada na principal tenho que dizer (ex) que f1.titular = new Pessoa(); 
                                       // Chamando a função Pessoa.
                f1.titular.nome = "Pablo";

            // Adicionando data como  tipo;
            f1.dataDeEntrada = new Data(); //  Chamo a função Data.
            f1.dataDeEntrada.preencheData(); // Atribuo os valores a data.

        Funcionario6 f2 = new Funcionario6();

            f2.salario = 6000;

            f2.titular = new Pessoa();
                f2.titular.nome = "Felipe Brasileiro";

            f2.dataDeEntrada = new Data();
            f2.dataDeEntrada.preencheData();


        f1.mostra(); // chamo a função mostra.
       // f2.mostra();
    }

}

BOA!!

Olá Pablo, boa noite. Tudo ótimo!

Vamos lá... o erro está apenas na sua classe que tem o método main, segue abaixo o seu código:

class Programa6 {

    public static void main(String[] args) {

        Funcionario6 f1 = new Funcionario6();

        f1.salario = 5000;

        f1.titular = new Pessoa(); // Quando vou usar uma classe que está linkada na principal tenho que dizer (ex)
                                    // que f1.titular = new Pessoa();
                                    // Chamando a função Pessoa.
        f1.titular.nome = "Pablo";

        // Adicionando data como tipo;
        f1.dataDeEntrada = new Data(); // Chamo a função Data.
        f1.dataDeEntrada.preencheData(05, 06, 1995); // Atribuo os valores a data.

        Funcionario6 f2 = new Funcionario6();

        f2.salario = 6000;

        f2.titular = new Pessoa();
        f2.titular.nome = "Felipe Brasileiro";

        f2.dataDeEntrada = new Data();
        f2.dataDeEntrada.preencheData(07, 06, 2016);

        f1.mostra(); // chamo a função mostra.
        // f2.mostra();
    }

}

O que está acontecendo é que você está chamando o método preencheData da classe Data sem passar os parâmetros que este método exige, se lá você definiu que recebe int dia, int mes, int ano, quem chamar este método precisa passar estes parâmetros de acordo com os tipos que você colocou.

Então para seu programa rodar, basta colocar estes parâmetros, segue abaixo:

class Programa6 {

    public static void main(String[] args) {

        Funcionario6 f1 = new Funcionario6();

        f1.salario = 5000;

        f1.titular = new Pessoa(); // Quando vou usar uma classe que está linkada na principal tenho que dizer (ex)
                                    // que f1.titular = new Pessoa();
                                    // Chamando a função Pessoa.
        f1.titular.nome = "Pablo";

        // Adicionando data como tipo;
        f1.dataDeEntrada = new Data(); // Chamo a função Data.
        f1.dataDeEntrada.preencheData(05, 06, 1995); // AQUI ESTÁ A MODIFICAÇAO

        Funcionario6 f2 = new Funcionario6();

        f2.salario = 6000;

        f2.titular = new Pessoa();
        f2.titular.nome = "Felipe Brasileiro";

        f2.dataDeEntrada = new Data();
        f2.dataDeEntrada.preencheData(07, 06, 2016); //AQUI ESTÁ A MODIFICAÇAO

        f1.mostra(); // chamo a função mostra.
        // f2.mostra();
    }

}

Voltando para a questão do exercício, acredito que a proposta é você ver o que acontece se você instanciar uma Data sem chamar o método preencheData. Isto é, sem atribuir os valores para dia, mes e ano.

Segue abaixo:

class Programa6 {

    public static void main(String[] args) {

        Funcionario6 f1 = new Funcionario6();

        f1.salario = 5000;

        f1.titular = new Pessoa(); // Quando vou usar uma classe que está linkada na principal tenho que dizer (ex)
                                    // que f1.titular = new Pessoa();
                                    // Chamando a função Pessoa.
        f1.titular.nome = "Pablo";

        // Adicionando data como tipo;
        f1.dataDeEntrada = new Data(); //NAO ATRIBUI NENHUM VALOR PARA DIA, MES E ANO, APENAS INSTANCIEI O OBJETO

        Funcionario6 f2 = new Funcionario6();

        f2.salario = 6000;

        f2.titular = new Pessoa();
        f2.titular.nome = "Felipe Brasileiro";

        f2.dataDeEntrada = new Data(); //NAO ATRIBUI NENHUM VALOR PARA DIA, MES E ANO, APENAS INSTANCIEI O OBJETO

        f1.mostra(); // chamo a função mostra.
        // f2.mostra();
    }

}

Rode o programa e veja o que vai imprimir no seu console!

Foi parecido com isso?

O Pablo ganha 5000.0 R$, e nasceu em: 0/0/0
===========================================================

O que acontece é que cada tipo tem um valor padrão. No caso do tipo int o valor padrão se você não atribuir um valor para ele vai ser 0.

Segue abaixo a tabelinha que peguei da documentação do java, nela tem o valor padrão de cada tipo primitivo:

Data TypeDefault Value (for fields)
byte0
short0
int0
long0L
float0.0f
double0.0d
char'\u0000'
String (or any object)  null
booleanfalse

Espero ter esclarecido sua dúvida :)

Um abraço!

THIAGO LUCAS TERAMAE Bom dia! Bem cara meu código já estava funcionando, o meu problema, que esqueci de falar, acredito, desculpa, era quando eu tirava a data e pedia a impressão, o código que compilava simplesmente deixava de compilar. como eu estava fazendo:

f1.dataDeEntrada = new Data(); //  Chamo a função Data.
     f1.dataDeEntrada.preencheData(20,10,1988); // Atribuo os valores a data.

Dai veio o exercício que pedia pra tirarmos a data para o código imprimir os valore 0 0 0, eu fazia isso aqui:

f1.dataDeEntrada = new Data(); //  Chamo a função Data.
          f1.dataDeEntrada.preencheData(); // Atribuo os valores a data.

E ai é que vinha o erro na hora da compilação, porém com sua explicação eu percebi que o java me obriga a digitar um valor se eu fizer desta ultima forma chamando a função e deixando os () em branco, dai vi que você não chamava essa função e fiz da mesma forma que você e deu certo a parte do exercício que era pra sair os valore 0. Muito obrigado por seu tempo, passei o dia todo ontem pensando que meu código é que estava errado!

Legal que entendeu, bons estudos.

Abraço!