9
respostas

Dando erro na hora de instanciar a classe funcionario e metodo mostra

Meu código esta dando erro na hora de instanciar a classe funcionario e no metodo mostra, o que pode ser

class Empresa { int cnpjEmp; String nomeEmp; int livre=0; Funcionario[] func;

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

void mostra(){ for(int i=0;i<this.func.length;i++){ Funcionario funcio = this.func[i]; if (funcio==null) continue; System.out.println(funcio.salFun); } }

class Funcionario{ String nomeFun; double salFun; }

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

Empresa empresa1 = new Empresa(); //empresa1.cnpjEmp = 451212145; //empresa1.nomeEmp = "FlexTronics"; empresa1.func = new Funcionario[10];

Funcionario f1 = new Funcionario(); f1.nomeFun = "Natan Boschini"; f1.salFun = 3200.0; empresa1.adiciona(f1);

Funcionario f2 = new Funcionario(); f2.nomeFun = "Marcelo Gadioli"; f2.salFun = 4200.0; empresa1.adiciona(f2);

empresa1.func[0].mostra(); empresa1.func[1].mostra();

} } }

9 respostas

Qual erro que aparece para voce?

non-static variable this cannot be referenced from a static context

aparece esse mesmo erro para Funcionario f1 = new Funcionario(); Funcionariof2 = new Funcionario();

e o erro cannot find symbol para empresa1.func[0].mostra(); empresa1.func[1].mostra();

erro no metodo mostra() ilegal static delcaration in inner class Empresa.TesteArray

e no public static void main(String[] args) modifier 'static' is only allowed in constant variable declarations

Antonio por um acaso você declarou as variaveis como static? por exemplo

private static String nome;

O erro que esta dando para você é de algo static, aqui no box de duvida, tem a opcão de inserir código né? clica la e coloca seu código dentro das "{}" que aparecer, ai da para entender melhor o seu cósdigo

Não Alisson , nao declarei nada como static...vou colocar o codigo novamente agora mais organizado um abraço

class Empresa { 

int cnpjEmp;

 String nomeEmp; 

int livre=0;

 Funcionario[] func;


void adiciona(Funcionario f) {

 this.func[this.livre] = f; this.livre++; 

}

void mostra(){

 for(int i=0;i<this.func.length;i++){ 

Funcionario funcio = this.func[i]; 

if (funcio==null) continue; 

System.out.println(funcio.salFun); } }


class Funcionario{

 String nomeFun; 

double salFun; }


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

Empresa empresa1 = new Empresa(); 

//empresa1.cnpjEmp = 451212145; 

//empresa1.nomeEmp = "FlexTronics"; 

empresa1.func = new Funcionario[10];


Funcionario f1 = new Funcionario();

 f1.nomeFun = "Natan Boschini";

 f1.salFun = 3200.0; empresa1.adiciona(f1);


Funcionario f2 = new Funcionario(); 

f2.nomeFun = "Marcelo Gadioli";

 f2.salFun = 4200.0; empresa1.adiciona(f2);


empresa1.func[0].mostra();
 empresa1.func[1].mostra();

} } }

Olá Antonio,

indentando o seu código olha como ele fica:

class Empresa { 

    int cnpjEmp;
    String nomeEmp; 
    int livre=0;
    Funcionario[] func;

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

    void mostra(){
        for(int i=0;i<this.func.length;i++){ 
            Funcionario funcio = this.func[i]; 
            if (funcio==null)
                continue; 
            System.out.println(funcio.salFun); 
        } 
    }

    //Funcionario dentro de Empresa
    class Funcionario{ 
        String nomeFun; 
        double salFun; 
    }

    //TesteArray dentro de Empresa
    class TesteArray{ 
        public static void main(String[] args){
            Empresa empresa1 = new Empresa(); 
            //empresa1.cnpjEmp = 451212145; 
            //empresa1.nomeEmp = "FlexTronics"; 

            empresa1.func = new Funcionario[10];
            Funcionario f1 = new Funcionario();
            f1.nomeFun = "Natan Boschini";

            f1.salFun = 3200.0; empresa1.adiciona(f1);
            Funcionario f2 = new Funcionario(); 
            f2.nomeFun = "Marcelo Gadioli";
            f2.salFun = 4200.0; empresa1.adiciona(f2);

            empresa1.func[0].mostra();
            empresa1.func[1].mostra();
        } 
    } 
}

Note que a classe Funcionario e TesteArray ficaram dentro da classe Empresa. Quase todos esses erros de compilação que você teve decorrem desse fato. Para não ter esse problema, a convenção do Java é que para cada arquivo .java tenha apenas 1 classe e que o nome da classe tem que ser igual ao nome do arquivo. Por exemplo, tente colocar toda a class Funcionario no arquivo Funcionario.java. Faça a mesma coisa para as classes Empresa e TesteArray . Basta que você deixe os 3 arquivos na mesma pasta que conseguirá compilar cada um deles e executar o TesteArray.

Um outro erro de compilação que você terá são nas linhas:

empresa1.func[0].mostra();
empresa1.func[1].mostra();

Note que aqui você acessa duas posições do array de func de empresa1, sendo um array do tipo Funcionario, e depois chama o método mostra. Como a posição guarda um Funcionario, então você está tentando chamar o método mostra do Funcionario. Mas olha como está a classe:

class Funcionario{ 
        String nomeFun; 
        double salFun; 
}

Ela não tem nenhum método mostra.Quem que tem esse método? A partir de quem você tem que chamar o método mostra? Tente descobrir como consegue resolver este problema do método.

Abraços

Agora funcionou, coloquei Funcionario como static e no método mostra consegui jogar Empresa.func,lenght, só ha um problema toda a vez q o método executa ele mostra todos os valores ...

class Empresa {
    int cnpjEmp;
    String nomeEmp;
    int livre=0;
    static Funcionario[] func;  

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

class Funcionario {
    String nomeFun;
    double salFun;  

    void mostra(){
        for(int i=0;i<Empresa.func.length ;i++){
            Funcionario funci = Empresa.func[i];    
            if (funci==null) 
                continue;
            System.out.println(funci.salFun); 
        }
    }
}

class TesteArray{
    public static void main(String[] args){
        Empresa empresa1 = new Empresa();
        //empresa1.cnpjEmp = 451212145;
        //empresa1.nomeEmp = "FlexTronics";
        empresa1.func = new Funcionario[10];

        Funcionario f1 = new Funcionario();
        f1.nomeFun = "Natan Boschini";
        f1.salFun = 3200.0;
        empresa1.adiciona(f1);
        //empresa1.func[0].mostra();

        Funcionario f2 = new Funcionario();
        f2.nomeFun = "Marcelo Gadioli";
        f2.salFun = 4200.0;
        empresa1.adiciona(f2);
        empresa1.func[1].mostra();
    }
}

Olá Antonio,

note que agora o seu método mostra está na classe Funcionario, porém ele mostra todos salário de todos os funcionarios da Empresa. Seria como se pro seu sistema, cada funcionário soubesse e tivesse acesso o salário de todas as pessoas que trabalham na empresa. Isso acontece no mundo real?

Para corrigir isso, faça com que esse mostra em Funcionario exiba apenas os atributos (nomeFun e salFun) deste funcionário e não de todos os funcionarios. Assim, quando você chamar empresa1.func[1].mostra(); ele mostrará apenas os dados de 1 funcionário, que está em empresa1.func[1] (no caso o Marcelo Gadioli).

Fazendo essa mudança no motra, você também pode tirar o static do funcna classe Empresa. Você verá depois os casos em que usamos o static, ele é explicado no último capítulo deste curso de Atributos e métodos estáticos.

Agora acho que ficou correto =D

class Empresa {
    int cnpjEmp;
    String nomeEmp;
    int livre=0;
    Funcionario[] func;  

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

class Funcionario {
    String nomeFun;
    double salFun;  

    void mostra(){
            System.out.println(this.nomeFun); 
            System.out.println(this.salFun);
    }
}


class TesteArray{
    public static void main(String[] args){
        Empresa empresa1 = new Empresa();
        //empresa1.cnpjEmp = 451212145;
        //empresa1.nomeEmp = "FlexTronics";
        empresa1.func = new Funcionario[10];

        Funcionario f1 = new Funcionario();
        f1.nomeFun = "Natan Boschini";
        f1.salFun = 3200.0;
        empresa1.adiciona(f1);
        empresa1.func[0].mostra();

        Funcionario f2 = new Funcionario();
        f2.nomeFun = "Marcelo Gadioli";
        f2.salFun = 4200.0;
        empresa1.adiciona(f2);
        empresa1.func[1].mostra();
    }
}

Olá Antonio,

parece ok, cada classe agora ficou com a sua própria responsabilidade. Funcionario representa como é o empregado e a Empresa que trabalha com o array de Funcionario. E note que no seu TesteArray, quando você chama o mostra é o específico de cada Funcionario.