2
respostas

Dúvida exercício 5

O código faz o que precisa fazer, exibe as informações certas mas com linhas de erro no meio, alguém sabe o que é?

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Aula4;


class Empresa {
String nomeEmpresa;
String cnpjEmpresa;
Funcionario [] empregados;
int livre=0;
void adicionar(Funcionario f){
    this.empregados[this.livre]=f;
    this.livre++;
}   

        void mostraEmpregados() {
            for (int i = 0; i <= empregados.length; i++) {
                System.out.println("Funcionário na posição: " + i +" seu nome é "+ this.empregados[i].nome);
                System.out.println("R$" + this.empregados[i].salario);
                System.out.println("Seu cargo é " +this.empregados[i].cargo);

            }
        }
}

        class TestaEmpresa {

            public static void main (String[] args) {
                Empresa empresa = new Empresa();
                empresa.empregados = new Funcionario[10];

                Funcionario f1 = new Funcionario();
                f1.nome = "Joao";
                f1.salario = 1000;
                f1.dataDeEntrada = new Data();
                f1.cargo ="Secretario";
                empresa.adicionar(f1);

                Funcionario f2 = new Funcionario();
                f2.nome="Jonathan";
                f2.salario = 1700;
                f2.dataDeEntrada = new Data();
                f2.cargo ="Motorista";
                empresa.adicionar(f2);

                  Funcionario f3 = new Funcionario();
                f3.nome = "Jose";
                f3.salario = 1750;
                f3.dataDeEntrada = new Data();
                f3.cargo ="Teste";
                empresa.adicionar(f3);

                empresa.mostraEmpregados();

            //    empresa.empregados[0].Mostra();
            //    empresa.empregados[1].Mostra();
              //   empresa.empregados[2].Mostra();
            }
        }


class  Data {
  int dia;
  int mes;
  int ano;

 void getFormatada (int dia, int mes, int ano){
      this.ano=ano;
    this.dia=dia;
    this.mes=mes;
   System.out.println("Data de entrada :"+this.dia+"/"+
               this.mes+"/"+this.ano);
 }
}

class Funcionario{
    String nome;
    String cargo;
    double salario;
   // String dataDeEntrada;
    String RG;
Data dataDeEntrada = new Data();

    void recebeAumento (double valor){
        this.salario += valor;
    }

    double calculaGanhoAnual(){
        return this.salario * 12;
    }
   void Mostra (){

       System.out.println("Nome :" + this.nome);
       System.out.println("Cargo atual: " +this.cargo);
       System.out.println("Salário atual :"+this.salario);

   //    System.out.println("Data de entrada :"+this.dataDeEntrada);
       System.out.println("RG:"+ this.RG);
       System.out.println("O cálculo de ganho anual é de" +this.calculaGanhoAnual());
   }


}




class TestaFuncionario {

    public static void main(String[] args) {
        Funcionario f1 = new Funcionario();
        Funcionario f2 = new Funcionario();
        Funcionario f3 = new Funcionario();

        f1.nome = "Juan";
        f2.nome = "Wellington";
        f3.nome = "Wellington";
        f3.salario = 500;
        f1.salario = 500;
        f2.salario = 550;
        f1.recebeAumento(50);
        f2.recebeAumento(25);
        f1.RG = "6469289";
        f1.cargo ="Estagiario";
     f1.Mostra();
     f1.dataDeEntrada.getFormatada(22, 04, 1995);

    // f2=f3;
     //  if (f2 == f3) {
   //         System.out.println("iguais");
   //     } else {
   //         System.out.println("diferentes");        
    //    }
   }

    }
2 respostas

Quais linhas estão com erros, e qual erro está informando?

Boa noite Juan.

Seu erro está no seguinte código:

void mostraEmpregados() {
            for (int i = 0; i <= empregados.length; i++) {
                System.out.println("Funcionário na posição: " + i +" seu nome é "+ this.empregados[i].nome);
                System.out.println("R$" + this.empregados[i].salario);
                System.out.println("Seu cargo é " +this.empregados[i].cargo);

            }
        }

Há dois erros neste for. O primeiro é que seu for precisa ter uma proteção caso a posiçao atual do "i" seja uma posição em que o array de funcionários esteja referenciando uma posição null, sem nenhum funcionário adicionado nela. Algo como:

void mostraEmpregados() {
            for (int i = 0; i < empregados.length; i++) {
                if (empregados[i] == null) {
                    continue;
                }
                System.out.println("Funcionário na posição: " + i +" seu nome é "+ this.empregados[i].nome);
                System.out.println("R$" + this.empregados[i].salario);
                System.out.println("Seu cargo é " +this.empregados[i].cargo);

            }
        }

O segundo erro é:

Suponha que sua empresa tenha 10 funcionários: empregados[0] empregados[1] . . . empregados[9]

Ao fazer

for (int i = 0; i <= empregados.length; i++)

usando o "<=", o seu "i" vai de 0 até 10, pois empregados.length é igual a 10. Ao tentar mostrar o empregados[10], você receberá uma exception, pois o índice do array vai de 0 a 9. Você deve fazer o for assim:

for (int i = 0; i < empregados.length; i++)

Espero ter ajudado.