ARRAY no JAVA

8 respostas
J

Pessoal,

Boa noite.

Mais uma vez venho buscar a ajuda dos ninjas do GUJ para mais uma missão.

Bom, recentemente me interessei por programação em Java e estou levando isso muito a sério. Foi então que comecei a pesquisar e estudar. Descobri no site da CAELUM a apostila FJ-11 com um material muito didático e pra quem não sabia nada me dei bem até que cheguei no capítulo 5, mas o que tem lá de tão monstruso?! Os arrays, isso entendi o conceito e tal fiz todos os exercícios mas travei no exercícios do capítulo já mencionado, fazem duas semanas que quebrei estou quebrando a cabeça ou mais. Vejam o que acontece:

Criei uma classe para um modelo de Funcionario:

ublic class Funcionario {

String nome;
String setor;
double salario;
String entrada;
String RG;
double saida;
public void bonus (double aumento){

double totalpay = this.salario + aumento;

this.salario = totalpay;

}
public void demite(){

if (saida <= 0)

{
System.out.println("CONTRATADO!");
}

else{

System.out.println(DEMITIDO!);	

}

}
public void mostra(){

System.out.println("NOME: " + this.nome);
System.out.println("SETOR: " + this.setor);
System.out.println("SALARIO: R$ " + this.salario);
System.out.println("CONTRATAÇÃO: " + this.entrada);
System.out.println("DESLIGAMENTO: " + this.saida);
}

}

Funciona bem até, depois fiz um teste com esta classe:

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

Funcionario joao = new Funcionario();
  
  // Inicio das atribuicoes.
  
  joao.nome = "Joao.";
  joao.setor = "RH.";
  joao.salario = 2500;
  joao.entrada = "01.JAN.2007."; 
  
  // Inicio do uso dos metodos.
  
  joao.bonus(300);
  joao.mostra();
  joao.demite();
  
  }

}

Até aqui beleza, mas agora no capitulo 5 pede pra

  1. Volte ao nosso sistema de Funcionario e crie uma classe Empresa. A Empresa tem um nome, cnpj e uma
    
    array de Funcionario, além de outros atributos que você julgar necessário.
    
    class Empresa {
    
    // outros atributos
    
    Funcionario[] funcionarios;
    
    String cnpj;
    
    }
    
  2. A empresa deve ter um método adiciona, que recebe uma referência a Funcionario como argumento, e
    
    guarda esse funcionário. Algo como:
    
    
    
    void adiciona(Funcionario f) {
    
    // algo tipo: this.funcionarios[ ??? ] = f
    
    // mas que posição colocar?
    
    }
    
    
    

Você deve inserir o Funcionario em uma posição da array que esteja livre. Existem várias maneiras para
você fazer isso: guardar um contador para indicar qual a próxima posição vazia ou procurar por uma posição
vazia toda vez. O que seria mais interessante?
É importante reparar que o método adiciona não recebe nome, rg, salário, etc. Essa seria uma maneira nem
um pouco estruturada, muito menos orientada a objetos de se trabalhar. Você antes cria um Funcionario e
já passa a referência dele, que dentro do objeto possui rg, salário, etc.

Galera por favor aceitem essa missão, me ajudem, TKS!!!

LINK da apostila: http://www.caelum.com.br/apostilas/

8 Respostas

Victor_Neves

tente a ideia de colocar o array dentro de uma estrutura for… talvez de certo…
é como ele disse, usar um contador…

B

Antes, uma revisão:

Para você poder colocar objetos dentro de um array, o array precisa primeiro existir. A sintaxe para instanciá-lo é:

funcionarios = new Funcionario[TAMANHO];

onde TAMANHO é um valor inteiro positivo. Este valor significa a quantidade de objetos que um array pode suportar(seu tamanho máximo). Também significa que este tamanho será alocado em memória, mesmo que não use ele todo.

Um aviso importante: Um array tem um tamanho fixo, ou seja, é impossível alterar o tamanho dele depois de criado. Se quiser obter mais espaço, terá que copiar todos os itens de dentro desse array para um array de tamanho maior.


Sobre o exercício ele pergunta, como saber quantos elementos há dentro de um array? Ele te dá duas respostas:
-Você pode guardar a quantidade fora do array, em um lugar qualquer(exemplo: dentro da classe Empresa), a atualizando sempre que for adicionar um novo funcionário,

-ou toda vez que quiser saber o tamanho, pode percorrer o array, contando quantos itens tem dentro dele.

J

Galera,

Vou tentar as dicas que me passaram e estruturar algo funcional. Se der certo ou errado vou postar as modificações.

Valeu!!!

rmendes08

Seria interessante você tentar implementar as duas estratégias, você vai adquirir uma boa maturidade para lidar com arrays.

jacobis

Caro amigo é fácil de resolver. Primeiro na classe Empresa fica assim:

public class Empresa {

// outros atributos
	Funcionario[] funcionarios;
	String cnpj ;
	int numElementos = 0;
	
	//Nosso construtor que inicializa a variável com uma quantidade de 10 elementos para exemplo
	public Empresa(){
		funcionarios = new Funcionario[10];
	}
	
	void adiciona(Funcionario f) {
		funcionarios[numElementos] = f;
		this.numElementos++;	//adiciona mais um ao numero de elementos
	} 
	
	public static void main(String[] args) {
                  
                    //inicializei para exemplificar que estamos adicionando um funcionário 
		Funcionario thiago = new Funcionario();
		thiago.nome = "thiago da Silva";
		thiago.entrada = "entrada X";
		thiago.RG = "1234567";
		thiago.saida = 1234;
		thiago.salario = 1340;
		
		//tudo feito ate agora, foi guardado na variável "thiago" TAD(tipo abstrato de dados) do tipo Funcionario
		//Agora é só passar para o método adiciona
		Empresa empresa = new Empresa();        //instanciamos a classe para ter acesso ao método
		empresa.adiciona(thiago);                       //passando por parâmetro
		
		System.out.println("Adicionado: "+empresa.funcionarios[0].nome); 
		//é exibido: Adicionado: thiago da Silva, o que acabamos de adicionar. Para tirarmos a dúvida vamos 
		//ver o que há no índice 1 do vetor funcionarios.
		System.out.println("Adicionado: "+empresa.funcionarios[1].nome);
		//foi gerado um erro de NullPointerException porque não há nada no índice 1.
	}
drsmachado
jacobis:
Caro amigo é fácil de resolver. Primeiro na classe Empresa fica assim:

public class Empresa {

// outros atributos
Funcionario[] funcionarios;
String cnpj ;
int numElementos = 0;

//Nosso construtor que inicializa a variável com uma quantidade de 10 elementos para exemplo
public Empresa(){
funcionarios = new Funcionario[10];
}

void adiciona(Funcionario f) {
funcionarios[numElementos] = f;
this.numElementos++; //adiciona mais um ao numero de elementos
}

public static void main(String[] args) {

//inicializei para exemplificar que estamos adicionando um funcionário
Funcionario thiago = new Funcionario();
thiago.nome = "thiago da Silva";
thiago.entrada = "entrada X";
thiago.RG = "1234567";
thiago.saida = 1234;
thiago.salario = 1340;

//tudo feito ate agora, foi guardado na variável "thiago" TAD(tipo abstrato de dados) do tipo Funcionario
//Agora é só passar para o método adiciona
Empresa empresa = new Empresa(); //instanciamos a classe para ter acesso ao método
empresa.adiciona(thiago); //passando por parâmetro

System.out.println("Adicionado: "+empresa.funcionarios[0].nome);
//é exibido: Adicionado: thiago da Silva, o que acabamos de adicionar. Para tirarmos a dúvida vamos
//ver o que há no índice 1 do vetor funcionarios.
System.out.println("Adicionado: "+empresa.funcionarios[1].nome);
//foi gerado um erro de NullPointerException porque não há nada no índice 1.
}

É por isso que os novos não usam a tag [code]. Os velhos não a usam.

Formatar corretamente o tópico ajuda a melhorar a qualidade das respostas.

jacobis

Desculpe amigo é que sou novo aqui no fórum!

JuniorMaia

"É por isso que os novos não usam a tag [code]. Os velhos não a usam.

Formatar corretamente o tópico ajuda a melhorar a qualidade das respostas."

+1 :thumbup:

Criado 4 de março de 2009
Ultima resposta 11 de jun. de 2012
Respostas 8
Participantes 7