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

Erro no laco for, quando estou preenchendo o array.

package funcionario;

public class Empresa {
    String nome;
    double cnpj;
    double inscricaoEstadual;
    int telefone;
    String produtos;
    int precoProduto;
    public Funcionario[] cadastroFuncionario = new Funcionario[10];

    public void adicionar (Funcionario f) {
        for (int i=0; i<cadastroFuncionario.length;i++)
         cadastroFuncionario[i]= new Funcionario();

        cadastroFuncionario[i]=f;

    }

}

nessa ultima linha onde adiciono o "f" ao funcionário ele não reconhece a posição "i".

3 respostas

Olá Gabriel,

Você esta usando o for sem as chaves { }. Tente colocá-las:

package funcionario;

public class Empresa {

    String nome;
    double cnpj;
    double inscricaoEstadual;
    int telefone;
    String produtos;
    int precoProduto;
    public Funcionario[] cadastroFuncionario = new Funcionario[10];

    public void adicionar (Funcionario f) {
            for (int i=0; i<cadastroFuncionario.length;i++){
                 cadastroFuncionario[i]= new Funcionario();
                 cadastroFuncionario[i]=f;
            }
    }

}

Espero ter te ajudado.

Não sei qual o propósito do exercício (vc está adicionando o mesmo Funcionário em todas as posições do array) mas o mais indicado seria:

   public void adicionar (Funcionario f) {
        for (int i=0; i<cadastroFuncionario.length;i++)
          cadastroFuncionario[i]=f;
    }

Alguns pontos a serem considerados:

1) Não teria necessidade de se criar uma nova instancia de Funcionario a cada iteração. Você pode simplesmente atribuir o valor recebido por parâmentro.

2) Você não utilizou "chaves" para delimitar o laço. Quando temos mais de uma linha de código a ser executada dentro de um "for" ou de um "if", por exemplo, vc precisa colocar as chaves.

solução!

O propósito do execício não é adicionar o funcionário e em todas as posições, mas sim em fazer uma validação e adicioná-lo apenas em uma posição livre.

Você pode fazer um laço percorrendo todas as posições do array, caso a posição seja nula if (cadastroFuncionario[i] == null), ai você adicionaria.

public void adicionar (Funcionario f) {
        for (int i=0; i<cadastroFuncionario.length;i++){
            if (cadastroFuncionario[i] == null){
                cadastroFuncionario[i]=f;
            }
        }
  }

Dessa forma você não atropelaria os valores das posições anteriores.

Ou você pode criar um atributo int posicaoLivre = 0 de classe armazenando para armazenar a posição livre. Por exemplo, após adicionar um funcionário, incrementamos +1 no posicaoLivre.

Sobre os pontos a serem considerados:

1 - O funcionário deve ser instanciado na classe de teste, e não na classe Empresa. Ele deve ser passado no método adicionar() pronto.

2 - Utilizar if ou for sem as chaves faz com que esse comandos só reconheçam apenas uma linha de código. No caso como você estava utilizando os dois comandos:

cadastroFuncionario[i]= new Funcionario(); 
cadastroFuncionario[i]=f;

O que faz com que o comando cadastroFuncionario[i]=f; não seja reconhecida, acusando que a variável i não foi definida.