Estou começando a aprender arrays e tenho o seguinte código para compilar no arquivo func.java:[code]class Empresa{
String nome=“saimgames”;
String cnpj=“048670146-80”;
Funcionario[] empregado;
empregado = new Funcionario[10];
void mostra(){
System.out.println("nome da empresa: "+nome+"\n cnpj: "+cnpj);
}
void admite(Funcionario indice, f){
empregado[indice]=f;
System.out.println("empregado["+indice+"]: "+f);
}
}[/code]Isso me dá o seguinte erro:[quote]func.java:80: <identifier> expected[/quote]
Existe a classe “Funcionario”, no mesmo arquivo, que funciona (foi criado antes e testado). A linha 80 é a 5a que foi apresentada.
Que identificador é esse, que deixei de lado?
O que estou tentando fazer, conforme enunciado no exercício da apostila que estou seguindo, é criar uma classe “Empresa” que contém uma array de objetos “Funcionario”.
A partir de outra classe public (TestaEmpresa) eu pretendo popular essa array.
Não tenho certeza se entrar com o índice da array como argumento é a melhor forma de popular essa array. Suponho que seja melhor fazer isso de dentro da classe “Empresa”, mesmo. Mas não estou seguro se sei fazer isso, umas dicas nesse sentido também seriam bem-vindas.
De fato, havia o erro mencionado, mas isso só não resolve o problema.
O erro permanece. Deixe eu tentar copiar a parte que mostra o ponto da linha em que o erro está:
[quote]func.java:80: expected
_____________empregado = new Funcionario [10];
______________________^
1 error[/quote]Ignorem as underlines, só dar espaço não estava resolvendo.
Funcionou! Ainda não entendi porque não estava funcionando antes…
Bom, minha dúvida está próxima do fim, mas a classe seguinte, que usa a classe empresa, está dando outro erro. Primeiro vou postar as duas classes, como estão agora, e em seguida, o erro:[code]class Empresa{
String nome=“saimgames”;
String cnpj=“048670146-80”;
//Funcionario[] empregado;
Funcionario[] empregado = new Funcionario[10];
//empregado = new Funcionario[10];
class TestaEmpresa{
public static void main(String[] args){
Empresa sg;
sg=new Empresa();
sg.mostra();
for (int i=0; i<10; i++){
Funcionario k=new Funcionario();
Empresa.admite(i, k);
}
}
}[/code]Agora o erro:
[quote]func.java:99: non-static method admite(int, Funcionario) cannot be referenced from a static context
Empresa.admite(i, k);
1 error[/quote]Eu nem sei o que é um contexto estático ou não-estático, então não economizem palavras pra explicar o erro, por favor.
Ou, se quiserem mostrar a forma inteligente de resolver o problema, eu não vou me sentir ofendido.
O modificador static referencia-se a variáveis e métodos da classe.
Quando você não utilizar este modificador, as variáveis e métodos são referentes a um objeto. Então você tem que ter uma instancia para utilizá-lo.
Quando um método é declarado como static, diz-se que ele é um método da classe.
Mas quando um método não é declarado com o modificador static, diz-se que ele é um método do objeto.
Você está chamando o metodo admite() que não é estatico, como estatico.
Para acessar esse método como estatico, deve-se usar o modificador static no metodo admite.
Para usar o metodo sem o modificador static, use o sg que criou do objeto.
sg.admite(i,k);
veja:
class TestaEmpresa{
public static void main(String[] args){
Empresa sg =new Empresa();
sg.mostra();
for (int i=0; i<10; i++){
Funcionario k = new Funcionario();
sg.admite(i, k);
}
}
}
CLARO!!!
Desculpem, moçada, comi mosca mesmo. O planejado ERA chamar o método admite para a instância sg, mas acabei chamando pra classe mesmo, não sei porque.
Apesar das detalhadas explicações, ainda não estou seguro de como usar o static. Provavelmente por causa do método de ensino que a apostila usa: ainda estou só no “miolo” do código, as definições do cabeçalho (ou daquela parte do código que estou chamando de cabeçalho) estão um pouco mais pra frente (espero).
Deu pra entender qual foi o erro, mas não sei se eu conseguiria usar um método declarado como static. Não se preocupem, o erro não deveria ter acontecido se eu seguisse o que a apostila diz, então suponho que em breve eu lerei mais sobre isso.