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

Dúvida no Ex. 6 da Aula 4 - Arrays

Meu código não rodou. apresenta o erro a seguir:

Erro: o método main não foi encontrado na classe Empresa; defina o método main como:
   public static void main(String[] args)
ou uma classe de aplicativo JavaFX deve expandir javafx.application.Application
10 respostas

Lincoln, tudo bem? Você poderia por favor, postar o código da sua classe? O erro já até diz qual é o problema, mas poderiamos ajudar de forma mais efetiva se junto com a sua pergunta, postasse também a mensagem do erro como já fez, como também o código ao que o erro se refere. Entende?

Olá Wanderson! Veja ai:

class Empresa{
    Funcionario [] empregados;


void mostraEmpregados() {
    for (int i = 0; i < this.empregados.length; i++) {
    System.out.println("Funcionário na posição: " + i);
    }
}    
void mostraCIC(){
    for (int j = 0; j < this.empregados.length; j++){
        System.out.println("CIC:" + this.empregados[j].CIC);
        }
    }


class Funcionario {
    String empregado;
    String CIC;
    private int livre;
    private Funcionario[]empregados;

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

public void mostra() {
    System.out.println("Funcionário na posição: " + empregado);
        }
    }


class TestaEmpresa {
    public static void main (String[] args) {
            Empresa BlueStar = new Empresa();
            BlueStar.empregados = new Funcionario[200];

            BlueStar.empregados[0] = new Funcionario();
            BlueStar.empregados[0].empregado = "Dilermando";
            BlueStar.empregados[0].CIC = "242.359.624-89";

            BlueStar.empregados[1] = new Funcionario();
            BlueStar.empregados[1].empregado = "Wellington";
            BlueStar.empregados[1].CIC = "359.659.838-51";

            BlueStar.empregados[2] = new Funcionario();
            BlueStar.empregados[2].empregado = "Carlos";
            BlueStar.empregados[2].CIC = "154.369.633-91";

            BlueStar.mostraEmpregados();
            BlueStar.mostraCIC();

          }
    private int livre;
    private Funcionario[] empregados;

void mostraTodasAsInformacoes() {
    for (int i = 0; i < this.livre; i++) {
        System.out.println("Funcionário na posição: " + i);
        ((Funcionario) this.empregados[i]).mostra();
        }
    }
boolean contem(Funcionario f) {
    for (int i = 0; i < this.livre; i++) {
        if (f == this.empregados[i]) {
            return true;
        }
    }
    return false;
        }

    }
}

e o erro: Erro: o método main não foi encontrado na classe Empresa; defina o método main como: public static void main(String[] args) ou uma classe de aplicativo JavaFX deve expandir javafx.application.Application

Lincoln, Bom dia !

o erro mostra como se não tivesse encontrado o método main .

tente retirar da sua classe TesteFuncionário , as seguintes informações :

private int livre;
    private Funcionario[] empregados;

void mostraTodasAsInformacoes() {
    for (int i = 0; i < this.livre; i++) {
        System.out.println("Funcionário na posição: " + i);
        ((Funcionario) this.empregados[i]).mostra();
        }
    }
boolean contem(Funcionario f) {
    for (int i = 0; i < this.livre; i++) {
        if (f == this.empregados[i]) {
            return true;
        }
    }
    return false;
        }

    }

pois você não está utilizando essas informações .

outra coisa alterei seu código , veja o que achou .

public class Empresa {
    Funcionario[] empregados;
    private int livre;

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

    void mostraEmpregados() {
        for (int i = 0; i < this.empregados.length; i++) {
        System.out.println("Funcionário na posição: " +i + this.empregados[i].empregado);
        System.out.println("CIC:" + this.empregados[i].CIC);
        }
    }    


}
public class Funcionario {
    String empregado;
    String CIC;
    private int livre;
    private Funcionario[] empregados;

    public void mostra() {
        for (Funcionario funcionario : empregados) {
            System.out.println("Funcionário na posição: " + funcionario.empregado);
            System.out.println("CIC: " + funcionario.CIC);

        }
    }

}
public class TestaEmpresa {
     public static void main (String[] args) {
         Empresa BlueStar = new Empresa();
         BlueStar.empregados = new Funcionario[2];

         Funcionario f1 = new Funcionario();
         f1.empregado = "Dilermando";
         f1.CIC = "242.359.624-89";
         BlueStar.adiciona(f1);

         Funcionario f2 = new Funcionario();
         f2.empregado = "Wellington";
         f2.CIC = "359.659.838-51";
         BlueStar.adiciona(f2);


         BlueStar.mostraEmpregados();


       }
}

Repare que coloquei o método adiciona na classe empresa , outra coisa .

caso aumente o número de funcionário no array , irá dar erro de java.lang.NullPointerException , isso porque não está instanciando as outras posições .

espero ter ajudado , Bons estudos.

Pode ser tambem que quando vc manda executar, não está selecionada a classe com a main, tente ir direto na classe e Run as > java aplication

solução!

Oi Lincoln, desculpe a demora, mas já estou cá de volta com a solução pro seu problema. São dois problemazinhos com ele.

Primeiro: Pelo que notei aqui, provavelmente você escreveu todo o codigo em um unico arquivo. Notei isso porque alguns pares de chaves {} não fecham corretamente, verifique isso. Deveria ter uma chave no fim da classe empresa, mas essa chave está no fim do arquivo, parecendo ser uma classe só. Entende?

Depois de verificar as chaves, seu código roda sem problemas, mas dá um erro, NullPointerException.

Segundo: O NullPointerException acontece porque você atribui um array com 200 posições à empresa, mas só preenche a informação de CIC a três deles, e quando seu codigo tenta mostrar o do proximo funcionario, ele não encontra o CIC por ser uma string ele dispara o NullPointerException. Pra solucionar isso basta mudar o 200 na criação do array para 3 ou preencher as informações que faltam nos demais funcionários.

Obs: A classe Empresa não precisa do metodo main nesse caso, mas a classe TestaEmpresa sim, pois esta é quem realmente executa o código. Por causa do problemas das chaves o java compilou todo o seu codigo em um unico arquivo .class, que na verdade, deveriam ser 3 arquivos, Funcionario, Empresa e TestaEmpresa, e você execuraria normalmente o TestaEmpresa. Essa compilação em um unico arquivo, "escondeu" o metodo main gerando o erro que você encontrou. Falei escondeu para não me estender muito na explicação.

Caso não tenha entendido, por favor, retorne comentando, que explicarei melhor o que aconteceu.

Abaixo está seu código corrigido e funcionando perfeitamente com as duas unicas modificações que fiz.

Boa sorte e bons estudos.

class Empresa{
    Funcionario [] empregados;


    void mostraEmpregados() {
        for (int i = 0; i < this.empregados.length; i++) {
        System.out.println("Funcionário na posição: " + i);
        }
    }
    void mostraCIC(){
        for (int j = 0; j < this.empregados.length; j++){
            System.out.println("CIC:" + this.empregados[j].CIC);
        }
    }
}


class Funcionario {
    String empregado;
    String CIC;
    private int livre;
    private Funcionario[]empregados;

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

    public void mostra() {
        System.out.println("Funcionário na posição: " + empregado);
    }
}


class TestaEmpresa {
    public static void main (String[] args) {
            Empresa BlueStar = new Empresa();
            BlueStar.empregados = new Funcionario[3];

            BlueStar.empregados[0] = new Funcionario();
            BlueStar.empregados[0].empregado = "Dilermando";
            BlueStar.empregados[0].CIC = "242.359.624-89";

            BlueStar.empregados[1] = new Funcionario();
            BlueStar.empregados[1].empregado = "Wellington";
            BlueStar.empregados[1].CIC = "359.659.838-51";

            BlueStar.empregados[2] = new Funcionario();
            BlueStar.empregados[2].empregado = "Carlos";
            BlueStar.empregados[2].CIC = "154.369.633-91";

            BlueStar.mostraEmpregados();
            BlueStar.mostraCIC();

    }

    private int livre;
    private Funcionario[] empregados;

    void mostraTodasAsInformacoes() {
        for (int i = 0; i < this.livre; i++) {
            System.out.println("Funcionário na posição: " + i);
            ((Funcionario) this.empregados[i]).mostra();
        }
    }

    boolean contem(Funcionario f) {
        for (int i = 0; i < this.livre; i++) {
            if (f == this.empregados[i]) {
                return true;
            }
        }
        return false;
    }

}

Muito Obrigado a todos pelos esclarecimentos. Agora está rodando corretamente.

Muito Obrigado a todos pelos esclarecimentos. Agora está rodando corretamente.

Obrigado a todos pelos esclarecimentos! Agora está rodando corretamente.

Obrigado a todos pelos esclarecimentos! Agora está rodando corretamente.

Obrigado a todos pelos esclarecimentos! Agora está rodando corretamente.