Solucionado (ver solução)
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...