Argumentos [RESOLVIDO]

Galera, esse é meu primeiro tópico aqui, sou iniciante em Java então me perdoem se a dúvida que tenho é meio tosca. Estou fazendo um exercício do curso de Java mas estou com problemas na execução do programa, já pesquisei na net e verifiquei que talvez fosse falta de passagem de argumentos, infelizmente não sei como deveria passar esses argumentos no programa que estou fazendo.

O erro que me retorna é:

[color=red]Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 0
at avaliacao01.Funcionarios.cadastraFuncionario(Funcionarios.java:20)
at avaliacao01.MenuPrincipal.main(MenuPrincipal.java:35)[/color]

Os códigos são os seguintes:

[color=green]Classe Funcionarios:[/color]

[code]package avaliacao01;

import javax.swing.JOptionPane;

public class Funcionarios {

int tamfunc;
private String func[] = new String[tamfunc];
private String sexo[] = new String[tamfunc];
int mat[] = new int[tamfunc];
private int cargo[] = new int[tamfunc];
private double saliq[] = new double[tamfunc];
private int horas;
private double valor, salbruto;
private String desc;

public void cadastraFuncionario() {
	int i = 1;
	for (int cont = 0; cont < tamfunc; cont++) {
		this.mat[cont] = Integer.parseInt(JOptionPane.showInputDialog("Informe a matrícula do " + i
				+ "º funcionário"));
		this.func[cont] = JOptionPane.showInputDialog("Informe o nome do " + i
				+ "º funcionário");
		this.sexo[cont] = JOptionPane.showInputDialog("Informe o sexo do funcionário");
		this.sexo[cont].toUpperCase();
		this.cargo[cont] = Integer.parseInt(JOptionPane
				.showInputDialog("Informe o cargo do funcionário\n1 - Professor\n2 - Administração\n3 - Manutenção"));
		i++;
	}
	System.out.println("Funcionários Cadastrados:\n");
	for (int cont = 0; cont < this.tamfunc; cont++) {
		if (this.sexo.equals("m")) {
			System.out.println(this.mat[cont] + " - " + this.func[cont]
					+ "-" + this.cargo[cont]);
		}
	}
	System.out.println("");
	for (int cont = 0; cont < this.tamfunc; cont++) {
		if (this.sexo.equals("f")) {
			System.out.println(this.mat[cont] + " - " + this.func[cont]
					+ "-" + this.cargo[cont]);
		}
	}
	System.out.println("");
}// fim do método cadastra funcionários

// método calcula salário
public void salario() {
	for (int cont = 0; cont < this.tamfunc; cont++) {
		if (this.cargo[cont] == 1) {// verificando se funcionário e
									// professor
			this.horas = Integer.parseInt(JOptionPane.showInputDialog(this.func[cont]
			                                            						+ "\nHoras Trabalhadas")); // lendo horas
																// trabalhadas
			this.valor = Double.parseDouble(JOptionPane.showInputDialog(this.func[cont]
			                                              						+ "\nValor da hora/aula"));// lendo
																// valor da
																// hora/aula
			
			this.desc = JOptionPane
			.showInputDialog("Descontar 6% referentes ao vale transporte (s ou n)?");// lendo
																	// se
																	// vai
																	// haver
																	// desconto
			this.salbruto = this.horas * this.valor; // calculando salário bruto
			// calculando salário líquido
			if (this.desc.equals("s")) {
				this.saliq[cont] = this.salbruto - ((this.salbruto / 100) * 6);
			} else if (this.desc.equals("n")) {
				this.saliq[cont] = this.salbruto;
			} else {
				JOptionPane.showMessageDialog(null, "Opção inválida!",
						"Erro!", 1);
				cont--;
			}
		} else if ((this.cargo[cont] == 2) | (this.cargo[cont] == 3)) {
			
			this.salbruto = Double.parseDouble(JOptionPane
					.showInputDialog(this.func[cont] + "\nSalário Bruto"));// lendo
																// salário
																// bruto
			
			this.desc = JOptionPane
			.showInputDialog("Descontar 6% referentes ao vale transporte (s ou n)?");// lendo
																	// se
																	// haverá
																	// desconto
			// calculando salário líquido
			if (this.desc.equals("s")) {
				this.saliq[cont] = this.salbruto - ((this.salbruto / 100) * 6);
			} else if (this.desc.equals("n")) {
				this.saliq[cont] = this.salbruto;
			} else {
				JOptionPane.showMessageDialog(null, "Opção inválida!",
						"Erro!", 1);
				cont--;
			}
			this.saliq[cont] -= (this.salbruto / 100) * 8;// subtraindo 8% do salário
												// bruto
		} else {
			JOptionPane.showMessageDialog(null, "Opção inválida!", "Erro!",
					1);
			cont--;
		}
	}// fim da repetição
}// fim do método calcula salário

public void exibeSalario() {// início do método para exibir salário
	for (int cont = 0; cont < this.tamfunc; cont++) {// início da
															// repetição
		if (this.cargo[cont] == 1) {
			System.out.println("O funcionario " + this.func[cont]
					+ " é professor e o seu salário é de R$"
					+ this.saliq[cont]);
		} else if (this.cargo[cont] == 2) {
			System.out.println("O funcionario " + this.func[cont]
					+ " trabalha na administração e o seu salário é de R$"
					+ this.saliq[cont]);
		} else {
			System.out.println("O funcionario " + this.func[cont]
					+ " trabalha na manutenção e o seu salário é de R$"
					+ this.saliq[cont]);
		}
	}// fim da repetição
}// fim do método exibeSalário

}
[/code]

[color=green]Classe Alunos:[/color]

[code]package avaliacao01;

import javax.swing.JOptionPane;

public class Alunos {

int tamaluno;
private String aluno[] = new String[tamaluno];
private int mat[] = new int[tamaluno];
private double nota1[] = new double[tamaluno];
private double nota2[] = new double[tamaluno];
private double media[] = new double[tamaluno];
private int i = 1;

public void cadastraAluno() {//início do método para cadastrar Alunos
	
	for (int cont = 0; cont<this.tamaluno; cont++) {
		this.mat[cont] = Integer.parseInt(JOptionPane.showInputDialog("Informe a matrícula do "+this.i+"º aluno"));//lendo matrícula
		this.aluno[cont] = JOptionPane.showInputDialog("Informe o nome do " + this.i + "º aluno");//lendo nome do aluno
	}
	System.out.println("Alunos Cadastrados:\n");
	for (String a : this.aluno){
		System.out.println(a);
	}
	System.out.println("");
}//fim do método cadastraAluno

public void calculaMedia(){//início do método para calcular média
	for (int cont = 0; cont<this.tamaluno; cont++){
		this.nota1[cont] = Double.parseDouble(JOptionPane.showInputDialog("Informe a 1ª nota do(a) aluno(a) "+this.aluno[cont]));//lendo nota 1
		this.nota2[cont] = Double.parseDouble(JOptionPane.showInputDialog("Informe a 2ª nota do(a) aluno(a) "+this.aluno[cont]));//lendo nota 2
		//calculando média
		this.media[cont] = (this.nota1[cont] + this.nota2[cont]) / 2;
		
	}
	}// fim do método calculaMédia

public void exibeMedia(){//início do método para exibir Média
	for (int cont = 0; cont < this.tamaluno; cont++) {// início da repetição
		System.out.println("\nMatrícula: "+this.mat[cont]+"Nome: " + this.aluno[cont] + "\nNota1: "
				+ this.nota1[cont] + "\nNota2: " + this.nota2[cont]
				+ "\nMédia: " + this.media[cont] + "\n");
	}// fim da repetição
}//fim do método exibeMédia

}
[/code]

[color=green]Classe MenuPrincipal:[/color]

[code]package avaliacao01;

import javax.swing.JOptionPane;

public class MenuPrincipal {
public static void main(String[] args) {
// declarando variáveis locais
Funcionarios cadFunc = new Funcionarios();
Alunos cadAluno = new Alunos();
int op = 9, op2 = 9;
// início da repetição do menu principal
while (op != 0) {

		op = Integer
				.parseInt(JOptionPane
						.showInputDialog("Informe a opção desejada:\n1 - Cadastro Funcionário"
								+ "\n2 - Cadastro Alunos\n0 - Sair")); // lendo
																			// opção
																			// do
																			// menu
																			// principal
		// verificando opção informada no menu principal
		switch (op) {
		case 1:
			//op2 = 9;// reinicializando variável
			while (op2 != 0) {// início da repetição do menu de funcionários
				op2 = Integer.parseInt(JOptionPane
						.showInputDialog("...:::BEM-VINDO AO MENU DE FUNCIONÁRIOS:::...\n\nEscolha a opção desejada:\n"
								+ "1 - Cadastrar Funcionário\n"
								+ "2 - Cadastrar Salários\n" + "0 - Sair"));// lendo opção do menu de funcionários
				// verficando opção informada no menu de funcionários
				switch (op2) {
				case 1:
					cadFunc.tamfunc = Integer.parseInt(JOptionPane.showInputDialog("Informe a quantidade de funcionários"));//lendo quantidade de funcionários
					cadFunc.cadastraFuncionario();
					break; // método de cadastro de funcionários
				case 2:
					cadFunc.salario(); // método de cadastro de salário
					cadFunc.exibeSalario();// método para exibir salário
					break;
				case 0:
					op2 = 0;
					break;
				default:
					JOptionPane.showMessageDialog(null, "Opção inválida",
							"ERRO", 1);
					break;
				}
			}// fim da repetição do menu de funcionários
			break;
		case 2:
			while (op2 != 0) {// início da repetição do menu de alunos
				
				op2 = Integer.parseInt(JOptionPane
						.showInputDialog("           ...:::BEM-VINDO AO MENU DE ALUNOS:::...\n\nEscolha a opção desejada:\n"
								+ "1 - Cadastrar Aluno\n"
								+ "2 - Cadastrar Notas\n" + "0 - Sair"));
				switch (op2) {
				case 1:
					cadAluno.tamaluno = Integer.parseInt(JOptionPane.showInputDialog("Informe a quantidade de alunos"));//lendo quantidade de alunos
					cadAluno.cadastraAluno();
					break;// método de cadastro de alunos
				case 2:
					cadAluno.calculaMedia();// método de cadastro das notas
											// e calculo da média
					cadAluno.exibeMedia();// método para exibir média
					break;
				case 0:
					op2 = 0;
					break;
				default:
					JOptionPane.showMessageDialog(null, "Opção inválida",
							"ERRO", 1);
					break;
				}
			}// fim da repetição do menu de alunos
			break;
		case 0:
			JOptionPane.showMessageDialog(null, "Programa encerrado",
					"Aviso", 2);
		default:
			JOptionPane
					.showMessageDialog(null, "Opção inválida", "ERRO", 1);
		}
	}// fim da repetição do menu principal
}

}
[/code]

Obs.: para evitar respostas em vão, eu não quero sugestão de mudança no programa, quero saber como devo passar os argumentos frente a esse erro que apareceu.

Grato.

Jr. Calabró

Houve acesso a uma posição inválida no array mat, linha 20:

this.mat[cont] = Integer.parseInt(JOptionPane.showInputDialog("Informe a matrícula do " + i

Isso ocorreu porque você declarou incorretamente a variável mat:

int tamfunc;
int mat[] = new int[tamfunc];

Note que a variável tamfunc não foi definida até esse momento.

Boa observação Eder, eu concordo, mas fiquei com uma dúvida… a minha classe principal deveria atribuir o valor da variável tamfunc no código:

cadFunc.tamfunc = Integer.parseInt(JOptionPane.showInputDialog("Informe a quantidade de funcionários"));//lendo quantidade de funcionários

Essa linha então não estaria atribuindo o valor à variável?

[quote=jrcalabro]

cadFunc.tamfunc = Integer.parseInt(JOptionPane.showInputDialog("Informe a quantidade de funcionários"));//lendo quantidade de funcionários

Essa linha então não estaria atribuindo o valor à variável?[/quote]

Sim, e ela esta, mas ja é tarde demais.

Experimente fazer mat = new int[tamfunc]; depois de ter feito o parseInt

Show de bola… valewzão Paulo. A ajuda dos dois me esclareceu bastante… funcionou direitinho. Fiquei fã desse fórum, espero poder ajudar também no que estiver ao meu alcance. Obrigado.