Argumentos [RESOLVIDO]

4 respostas
J

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]
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

}

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

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
}

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

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
	}
}

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ó

4 Respostas

Eder_Peixoto

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.

J

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?

Paulo_Silveira

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?

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

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

J

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.

Criado 6 de abril de 2010
Ultima resposta 6 de abr. de 2010
Respostas 4
Participantes 3