Duvida simples com Metodos


public class Projeto {


	public static void main(String[] args) 
	{
		Empresa CineMax = new Empresa();
		CineMax.numeroDeFuncionarios = 10;
		CineMax.Adciona();
		CineMax.estagiario[0].nome = "Zezinho";
		
		System.out.println(CineMax.estagiario[0].nome);
	}

}

//# CLASSE EMPRESA ##################################################
class Empresa{
	
	String nome;
	int numeroDeFuncionarios = 0; //não consigo modificar esse valor
	int idDoFuncionario = 0;
	Funcionario[] estagiario = new Funcionario[numeroDeFuncionarios];
	
	void Adciona() 
	{
		if(idDoFuncionario < numeroDeFuncionarios){
			this.estagiario[idDoFuncionario] = new Funcionario();
			this.idDoFuncionario++;
		}
		
	}
}
//# CLASSE FUNCIONARIO ###############################################
class Funcionario{
	
	String nome;
}

Ola estou com uma duvida nesse codigo acima.

bem é um codigo simples com 2 classes.

mas acontece que não estou conseguindo mudar o valor de “numeroDeFuncionarios” dentro do Main.

exemplo: A classe “Empresa” eu defini com 0 funcionarios inicalmente, para se alterando no dentro Main.
dentro desta classe tem um metodo “Adciona” para adcionar um array de funcionarios. Esse array tem “numeroDeFuncionarios” de tamanho que inicialmente é zero. Ai dentro Do main eu mudo o “numeroDeFuncionarios” de 0 para 10 por exemplo, mas quando eu tendo usar o metodo “adciona” ele ainda acha que o “numeroDeFuncionarios” é 0 como inicialmente. :?

eu realmente não entendi essa lógica, aparentemente esta tudo perfeito, mas o metodo “Adciona” não atualiza como o esperado.

if(idDoFuncionario < numeroDeFuncionarios){

essa parte deveria ser assim:

if (0 < 10) {

mas ele insistem em fazer:

if(0 < 0){

mesmo eu mudando esse valor “numeroDeFuncionarios” de 0 para 10 no Main …

realmente não entendi

esse exercicio é um parecido com o da apostila da ‘Caelum’ .

espero ajuda vlw.

Existem algumas maneiras de se fazer isso, vou dizer duas.

1 - Mude as variaveis da classe empresa para static

static String nome; static int numeroDeFuncionarios = 0; //não consigo modificar esse valor static int idDoFuncionario = 0;

2 - Crie métodos dentro da classe Empresa para alterar os valores, algo deste tipo:

void setNumeroDeFuncionarios(int n){ numeroDeFuncionarios = n; }

public class Projeto {


	public static void main(String[] args) 
	{
		Empresa CineMax = new Empresa();
		CineMax.mudarNumeroDeFuncionarios(10);
		
		CineMax.Adciona();
		CineMax.estagiario[0].nome = "Zezinho";
		
		System.out.println(CineMax.estagiario[0].nome);
	}

}

//# CLASSE EMPRESA ##################################################
class Empresa{
	
	String nome;
	int numeroDeFuncionarios; // se eu colocar =  1 funciona, mas quero que cada empresa tenha um numero fixo de funcionarios
	int idDoFuncionario = 0;
	Funcionario[] estagiario = new Funcionario[numeroDeFuncionarios];
	
	void mudarNumeroDeFuncionarios(int f){ // mudei aqui
		this.numeroDeFuncionarios = f;
	}
	void Adciona() 
	{
		if(idDoFuncionario < numeroDeFuncionarios){
			this.estagiario[idDoFuncionario] = new Funcionario();
			this.idDoFuncionario++;
		}
		
	}
}
//# CLASSE FUNCIONARIO ###############################################
class Funcionario{
	
	String nome;
}

continua dando o mesmo erro :


Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
	at primeiro.Empresa.Adciona(Projeto.java:33)
	at primeiro.Projeto.main(Projeto.java:11)

novamente esse codigo esta aparentemente perfeito, mas por algum motivo loko da esse erro :?

O problema é q vc não está inicializando o numero de funcionarios, entao vc tenta criar um array passando null, não vai funcionar mesmo…

explica detalhadamente o q esta tentando fazer, mas a idéia q vc esta fazendo no programa esta errada…

tenta por esta linha dentro de um metodo q recebe um int
Funcionario[] estagiario = new Funcionario[numeroDeFuncionarios];

Ai que esta

se eu inicializar a variavel “numeroDeFuncionarios” com 100 por exemplo, o programa funciona. Mas se eu criar outra empresa com 200 funcionarios, mesmo eu mudando “novaEmpresa.numeroDeFuncionarios = 200” o programa não aceita fica sempre nos 100 declarados na classe empresa.

Estranho isso é como se o “numeroDeFuncionarios” fosse uma constante.

estou sem ideias do que fazer, até porque estou começando agora a programar com classes … :frowning:

tipo se eu mudar "empresa1.NumeroDeFuncionaris(200);

depois da um print nisso vai mostrar 200.

mas la no método ‘Adciona’ continua sendo o valor inicial declarado na classe Empresa.

ja estou ficando maluco :shock:

Então, vc esta precisando revisar alguns conceitos sobre Orientação a Objeto, variaveis estaticas e variaveis globais.

procura se informar sobre essas coisas.

Quanto a duvida vc esta usando uma variavel global, apenas os métodos internos podem muda-la. Muda pra static ou faz um método para alterar o valor…

:? do jeito que esta indo é melhor ou eu comprar um livro de java (apostilas que soh tem as perguntas, mas não a resposta não da…) ou fazer um curso de publicidade e propaganda mesmo… :cry:

Calma, não se desespere, lembre-se q vc é brasileiro e não desiste nunca kkkkk

Tentei arrumar seu código:

[code]public class Projeto {

public static void main(String[] args) 
{
	Empresa CineMax = new Empresa();
	CineMax.mudarNumeroDeFuncionarios(10);
	
	CineMax.Adciona();
	CineMax.estagiario[0].nome = "Zezinho";
	
	System.out.println(CineMax.estagiario[0].nome);
}

}

//# CLASSE EMPRESA ##################################################
class Empresa{

String nome;
static int numeroDeFuncionarios; // mudei para static
static int idDoFuncionario = 0;
Funcionario[] estagiario = new Funcionario[numeroDeFuncionarios];

void mudarNumeroDeFuncionarios(int f){ // mudei aqui
	numeroDeFuncionarios = f;
}
void Adciona() 
{
	if(idDoFuncionario &lt numeroDeFuncionarios){
		this.estagiario[idDoFuncionario] = new Funcionario();
		this.idDoFuncionario++;
	}
	
}

}
//# CLASSE FUNCIONARIO ###############################################
class Funcionario{

static String nome;

}[/code]

Olá amigo,

Tb sou iniciante em Java, mas tentei te ajudar da melhor maneira que pude. Fiz algumas alterações no seu programa e imagino que seja algo parecido com esse código que vc está precisando :

import java.io.*;
  
  class Empresa{
 	
 	private String nomeEmpresa;
 	private int numeroDeFuncionarios; 
 	
 	public void setNumeroDeFuncionarios(int a) {
 		numeroDeFuncionarios = a;
 	}
 	
 	public int getNumeroDeFuncionarios() {
 		return numeroDeFuncionarios;
 	} 		
 }

 class Funcionario{
 	
 	private String nomeFuncionario;
 	private int idDoFuncionario;
 	
 	public void setIdDoFuncionario(int id){
 		idDoFuncionario = id;
 	}
 	
 	public int getIdDoFuncionario() {
 		return idDoFuncionario;
 	}
 	
 	public void setNomeFuncionario(String nome) {
 		nomeFuncionario=nome;
 	}
 	
 	public String getNomeFuncionario() {
 		return nomeFuncionario;
 	}
 }
 
 
 public class Projeto {
 	
 	public static void Adiciona(int numFunc, Funcionario[] estagiario) {
 		for (int y=0; y<numFunc; y++)
 		estagiario[y].setIdDoFuncionario(y); 			
 		} 	
  
  	public static void main(String[] args){
 		
    	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    	 		
 		Empresa CineMax = new Empresa();
 		
 		System.out.print("Informe o total de funcionarios: ");
 		try {
 			CineMax.setNumeroDeFuncionarios(Integer.parseInt(br.readLine()));
 			}
 			catch (Exception ioe) {
				System.out.println("Erro de entrada de dados");
				System.exit(1);
				} 
 		
 		
 		Funcionario[] estagiario = new Funcionario[CineMax.getNumeroDeFuncionarios()];
 		
 		
 		for (int x=0;x<=estagiario.length-1;x++){
			estagiario[x] =  new Funcionario();
			System.out.print("Nome do Funcionario "+(x+1)+ ":");
			try{
			estagiario[x].setNomeFuncionario(br.readLine());
			}
			catch (IOException ioe) {
				System.out.println("Erro de entrada de dados");
				System.exit(1);
				}
			}
			
		Adiciona(CineMax.getNumeroDeFuncionarios(),estagiario);
			
		for (int x=0;x<=estagiario.length-1;x++)
		System.out.println("Id do funcionario "+(x+1)+ ":" +estagiario[x].getIdDoFuncionario());
 	
 	}
 
 } 

Espero ter ajudado! Qualquer dúvida, volte a postar!


public class Projeto {


	public static void main(String[] args) 
	{
		Empresa CineMax = new Empresa();
		CineMax.mudarNumeroDeFuncionarios(100);
		
		for (int i = 0; i< CineMax.numeroDeFuncionarios; i++ ){
			CineMax.Adciona();
			CineMax.estagiario[i].nome = "Estagiario " + (i + 1);
			System.out.println(CineMax.estagiario[i].nome);
		}
	}

}

//# CLASSE EMPRESA ##################################################
class Empresa{
	
	String nome;
	int numeroDeFuncionarios = 0;
	int idDoFuncionario = 1;
	Funcionario[] estagiario;
	
	void mudarNumeroDeFuncionarios(int f){
		  estagiario = new Funcionario[f];
		  this.numeroDeFuncionarios = f;
	}
	void Adciona() 
	{
		this.estagiario[(idDoFuncionario -1)] = new Funcionario();
		this.idDoFuncionario++;
	}
}
//# CLASSE FUNCIONARIO ###############################################
class Funcionario
{
	String nome;
}

Valeuu como o Romeo disse eu sou brasileiro e depois de se muita pancadaria consegui :smiley:

valeu Flavio tambem, agora tenho que imprementar esse Buffered para entrada de dados no meu codigo.

vlw

e eu pensando em fazer publicidade e propaganda 8) …