Arrays, Get e Set

5 respostas
E

Gente, estou fazendo aqui uma sequencia de exercícios da apostila Caelum, quando ela me pediu para fazer isso:

6) (opcional) Crie os getters e setters da sua classe Empresa e coloque seus atributos como private. Lembre-se de que não necessariamente todos os atributos devem ter getters e setters. Por exemplo, na classe Empresa, seria interessante ter um setter e getter para a sua array de funcionários? Não seria mais interessante ter um método como este?
class Empresa {
// ...
public Funcionario getFuncionario (int posicao) {
return this.empregados[posicao];
}
}

Pois bem, fiz o que foi pedido, agora nao to conseguindo imprimir os arrays...

public class Funcionario {
	private String Nome;
	private double Salario;
	private static int ident;
	
	public Funcionario(){
		System.out.println("Criando construtor...");
		ident++;
	}
	
	public Funcionario(String nome){
		this.Nome = nome;
		ident++;
	}
	
	public void setNome(String nome){
		this.Nome = nome;
	}
	
	public String getNome(){
		return this.Nome;
	}
	
	public void setSalario(double sal){
		this.Salario = sal;
	}
	
	public double getSalario(){
		return this.Salario;
	}
	public int getIdent(){
		return ident;
	}}
public class Empresa {
	Funcionario[] empregados;
	private static int i = 0;
	
	public Funcionario getFuncionario(int posicao){
		return this.empregados[posicao];
	}
	
	public void setFuncionario(Funcionario f){
		this.empregados[i] = f;
		i++;
	}	 
}
public class TestFunc {
	public static void main(String args[]){
		Empresa e = new Empresa();
		e.empregados = new Funcionario[10];
		Funcionario f2 = new Funcionario();
		Funcionario f3 = new Funcionario("Thamara");
		
		f2.setNome("Marcos");
		f2.setSalario(1000);
		f3.setSalario(2000);
		
		e.setFuncionario(f2);
		e.setFuncionario(f3);
		
		System.out.println(e.getFuncionario(0));
		
	}

}
Imprime na tela isso:
//Criando construtor...
//Funcionario@cf2c80

5 Respostas

G

no seu getter esta escrito:

System.out.println("Criando construtor...");

ou seja quando você chamar funcionário ele vai escrever isso, apaga isso do código, e diz que ident aumenta de 1 em 1, ou seja ele vai aumentar em 1 o valor de ident, você criou arrays, mas não criou os funcionários nem o getter certo, coloque dentro do construtor funcionário para retornar as variáveis que você quer retornar, você pode fazer isso com um System.out.println por exemplo:

public funcionario( { System.out.println( "o nome deste funcionario é: " + nome + " o salario desse funcionario é: " + salario); // Assim quando você chamar o construtor funcionário ele imprimira o que esta escrito no System.out.println }

ou com o return mesmo, e você criou 10 arrays e não colocou nada dentro de cada um você terá de criar um funcionário para cada array. Bom sou novato mais acho que é isso amigo.

a um exemplo para a criação dos arrays:

e.empregados = new Funcionario[10];
e.funcionario[0] = nome = "la";(nao sei se isso da certo mas tenta)

a e uma coisa sobre a organização, (você pode ter um estilo mais eu recomendo que faça assim) primeiro as variaveis, depois getters e setters, depois métodos depois alguma outra coisa que possa ser preciso e depois o construtor, bom é isso.

E

gabriel-java:

no seu getter esta escrito:

System.out.println("Criando construtor...");

ou seja quando você chamar funcionário ele vai escrever isso, apaga isso do código, e diz que ident aumenta de 1 em 1, ou seja ele vai aumentar em 1 o valor de ident, você criou arrays, mas não criou os funcionários nem o getter certo, coloque dentro do construtor funcionário para retornar as variáveis que você quer retornar, você pode fazer isso com um System.out.println por exemplo:

public funcionario( { System.out.println( "o nome deste funcionario é: " + nome + " o salario desse funcionario é: " + salario); // Assim quando você chamar o construtor funcionário ele imprimira o que esta escrito no System.out.println }

ou com o return mesmo, e você criou 10 arrays e não colocou nada dentro de cada um você terá de criar um funcionário para cada array. Bom sou novato mais acho que é isso amigo.

a um exemplo para a criação dos arrays:

e.empregados = new Funcionario[10];
e.funcionario[0] = nome = "la";(nao sei se isso da certo mas tenta)

a e uma coisa sobre a organização, (você pode ter um estilo mais eu recomendo que faça assim) primeiro as variaveis, depois getters e setters, depois métodos depois alguma outra coisa que possa ser preciso e depois o construtor, bom é isso.

Cara, agradeço sua tentativa, mas eu acho que tu sabe menos do que eu:

gabriel-java:

no seu getter esta escrito:

System.out.println("Criando construtor...");

ou seja quando você chamar funcionário ele vai escrever isso, apaga isso do código, e diz que ident aumenta de 1 em 1, ou seja ele vai aumentar em 1 o valor de ident, você criou arrays, mas não criou os funcionários nem o getter certo, coloque dentro do construtor funcionário para retornar as variáveis que você quer retornar, você pode fazer isso com um System.out.println por exemplo:

public funcionario( { System.out.println( "o nome deste funcionario é: " + nome + " o salario desse funcionario é: " + salario); // Assim quando você chamar o construtor funcionário ele imprimira o que esta escrito no System.out.println }

essa parte ai tem 2 erros, o primeiro é que não vai existir o nome e o salario do funcionario para aparecer no print, pois esse metodo é apenas a inicialização do construtor, nem foi atribuido valor a ele ainda… segundo que faltou o this(ele vai sempre se referenciar ao mesmo funcionario)…

e isso aqui tu ta de brinks né?

só posta se realmente saber, valeu? pq eu fazendo errado, mais vc fazendo errado, vai confundir e piorar as coisas

JuniorMaia

você está imprimindo o hashcode da posição, use o método .toString()

rmendes08

Mas a implementação padrão do método toString() faz exatamente isso, imprimir o nome da classe + @ + hashcode.

rmendes08

Sugestões:

  1. Na sua classe Empresa, torne o array de Funcionario um atributo privado. Você pode informar o número máximo de Funcionario no momento de instanciar o objeto Empresa, daí você cria o array dentro do construtor. A variável que controla em qual posição o Funcionario deverá ser gravado não pode ser static, tem que ser de instância pois cada objeto empresa tem seu próprio array.
class Empresa{

    public Empresa( int numeroMaximoFuncionario ){
        funcionarios = new Funcionario[numeroMaximoFuncionario];
        contadorFuncionario = 0;
    }
}
  1. Sobrescrever o método toString() de Funcionario:
class Funcionario{
    public String toString(){
        return "[" + nome + ", " + identidade + "]";
    }
}
Criado 7 de junho de 2012
Ultima resposta 8 de jun. de 2012
Respostas 5
Participantes 4