Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
18
respostas

Começando com OO. Exercicio 6.

Por gentileza, preciso de ajuda para entender e fazer com que o Exercício 6 funcione.

Ao compilar a classe TestaFuncionariox ocorre os seguintes erros:

C:\Ambiente Alura>javac tstaFuncionariox.java
TestaFuncionariox.java:9: error: incompatible types
    F1.dataEntrada = new Data();  
    Required: String
    Found: Data

TestaFuncionariox.java:10: error: cannot find symbol
         F1.dataEntrada.preencheDataEntrada(15,01,2014);
         Symbol: method preencheDataEntrada(int,int,int);
         Location: variable dataEntrada of type String
2 errors


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

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

public class Funcionariox {
    String nome;
    Data dataEntrada;
    double salario;

    void recebeAumento(double aumento) {
        this.salario +=aumento;
    }

    void mostra1() {
        System.out.println("Nome f1.........: " + this.nome);
         System.out.println("Data Entrada f1.: " + this.dataEntrada);
         System.out.println("Salario Atual f1: " + this.salario);
    }

}

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

          Funcionario f1 = new Funcionario();
          f1.nome = "Vicente Paulo";
          f1.salario = 240.00;
          f1.recebeAumento(60);

        f1.dataEntrada = new Data();
        f1.dataEntrada.preencheDataEntrada(15, 01, 2014);
        f1.mostra1();
      }
}
18 respostas

Amigo você precisa primeiro criar um objeto data.

Data data = new Data(); data.preencheDataEntrada .../

Depois seta dentro do funcinario o objeto data. f1.dataEntrada = data;

Olá Vicente, aparentemente seu código está correto. Porém pela descrição do erro parece que você tentou passar um objeto do tipo Data onde deveria ser String. Acredito que você fez a alteração nas classes mas esqueceu de recompilá-las, ou seja, seu código está correto mas os .class (bytecodes compilados) não foram atualizados.

O que o Lucas falou não é verdade pois você criou o objeto data fazendo

f1.dataEntrada = new Data();

O que é uma versão simplificada e mais "avançada" do que o

Data data  new Data();
f1.dataEntrada = data;

Você só não fez em menos linha como economizou memória na criação de uma variável de referência.

Eu ainda acho, Vicente, que você está compilando outro fonte do TestaFuncionariox, pois o erro apontado pelo java reclama de F1.dataEntrada, mas no código que você postou aqui não existe F1.dataEntrada e sim f1.dataEntrada

Bem observado SIDNEI, o erro acusa o uso de F1 e o código mostrado o uso de f1. Lembre-se que em JAVA F1 e f1 não são a mesma coisa.

Mas mesmo assim o compilador acusa erro por tentar colocar uma Data onde deveria ser String, logo F1 existe.

Ricardo, obviamente que F1 existe. Mas não no arquivo que o Vicente está postando aqui... Isto, a meu ver, significa que ele está compilando outro fonte e não este que vemos.

Vicente dá uma olhada...

Outro fato relevante:

Vicente, o seu testaFuncionariox usa a classe Funcionario. E o fonte que você apresenta aqui é da classe Funcionariox;

Em algum momento você deve ter compilado esta classe.

Procura no teu diretório o arquivo Funcionario.class ; Se ele existir, deleta e roda novamente a testaFuncionariox.

Pode ser o que o SIDNEI falou mesmo. Ou tem dois arquivos com nomes parecidos no mesmo diretório (Funcionario e Funcionariox) ou pode estar no diretório errado.

O erro começa na classe Data. Lá vc não tem métodos de acesso aos valores (dia, mes , ano). então na classe funcionario, vc tenta pegar o valor:

 void mostra1() {
System.out.println("Nome f1.........: " + this.nome);
**System.out.println("Data Entrada f1.: " + this.dataEntrada);**
System.out.println("Salario Atual f1: " + this.salario);
}

E o outro erro é que vc ta chamando a classe Funcionario em vez de Funcionariox. Tente corrigir isso e teste pra ver.

Corrigindo minha resposta, o erro começa na classe TestaFuncionariox. Vc ta fazendo referencia a classe Funcionario ao invés de Funcionariox:

public class TestaFuncionariox {
  public static void main(String[] args) {
  Funcionario f1 = new Funcionario(); //Deveria ser Funcionariox aqui
  f1.nome = "Vicente Paulo";
...

e lá na classe Funcionariox, no método mostra, vc está imprimindo o hash do objeto e não o conteúdo da classe Data. Lá vc tem que criar um método que retorne os valores das datas, de preferência retornando uma String, ficando dessa forma:

String dataFormatada(){
    return this.dia + "/" + this.mes + "/" + this.ano;    
}

Obrigado! a todos. Questão resolvida.

Qual era o problema, Vicente?

Oi! Sidnei, na verdade era problema de vista, ou seja, não estava enxergando que o nome da classe Funcionário estava com X.

problema já resolvido.

public class Funcionariox

cara vc esta declarando a classe com funcionariox e chamando funcionario...

ublic class Funcionariox

cara vc esta declarando a classe com funcionariox e chamando funcionario...

Conseguiu resolver o problema?

Vicente, já que está resolvido, quem sabe você encerra este tópico?

solução!

Oi! Sidnei, esqueci de fechar o tópico. vlw...

Oi! Felipe, problema resolvido. vlw...