Java.lang.ArrayIndexOutOfBoundsException: 4

Olá tenho que entregar este trabalho na faculdade hj e estou apanhando feio.
Olhem só :

Ele está somando as notas das matérias…
e se colocar mais de 2 alunos ele só faz de um aluno não faz do 2º e da a mensagem java.lang.ArrayIndexOutOfBoundsException: 4

Olhem como está:

[color=green][/color][code]
package avaliacao;

import aluno.;
import javax.swing.
;
/**

  • class Avaliacao

  • Esta classe e respónsavel por guardar

  • calculos da avaliacao do aluno como

  • nota, total e media

  • @name class Avaliacao

  • @access public
    */
    public class Avaliacao {

    public float nota[] =new float [4];
    public float total = 0;
    public float media[] = new float[4];
    int c = 0;
    int m = 0;
    int n = 0;

    /**Responsável por buscar dados e calcular a media dos alunos

    • com as notas digitadas
    • @name mediaAluno()
    • @access public
    • @type float
    • @return mediaAluno()
      */
      public float mediaAluno() {
      JOptionPane.showMessageDialog(null,"Calculo da media do aluno(a): "+Aluno.nome[m]);
      for (c = 0; c<=Aluno.qtdAluno; c++) {
      for (m =0; m<=Aluno.materia.length; m++) {
      for (n=0;n<4;n++) {
      nota[n] = Float.parseFloat(JOptionPane.showInputDialog("Digite a "+(n+1)+"ª nota de " +Aluno.materia[m]+ " do(a) aluno(a) "+Aluno.nome[c]));
      total += nota[n];
      media[n] = total/4;
      System.out.println("total nota de " + Aluno.materia[m] + total);
      System.out.println("media de " + Aluno.materia[m]+ media[n]);
      //break;
      }
      }
      }
      return mediaAluno();
      }
      }
      [/code]

[color=olive][/color][code]
package aluno;
import menu.Menu;
import avaliacao.Avaliacao;

public class Programa {

private static Avaliacao av;

/**
 * @param args
 */
public static void main (String []args) {
	Menu menu = new Menu();
	av = new Avaliacao();
	 
	menu.MenuPrograma();
	return;
}

}[/code]

[color=green][/color][code]

package menu;
import javax.swing.JOptionPane;
import aluno.;
import avaliacao.
;

public class Menu {

public int opcao =0;
Aluno al = new Aluno();
Avaliacao av = new Avaliacao();

/**
 * 
 * @return
 */
public String MenuPrograma() {
	opcao = Integer.parseInt(JOptionPane.showInputDialog( "--SISPRO-- MENU OPCÕES:\n1-CADASTRA;\n2-SAIR;\n3-relatorio.\n digite sua opcao."));
	while (opcao !=0) {	
		switch (opcao) {
			case 1:
				if (al.qtdAluno() == 0){
					al.qtdAluno();
				} else {
					al.cadastraAluno();
					av.mediaAluno();
					al.frequencia();
					al.aprovacao();
					MenuPrograma();
				}
				break;
			case 2:
				al.sair();
				return al.sair();
			case 3:
				int resp = 0;
				//al.relatorio();
				resp = Integer.parseInt(JOptionPane.showInputDialog("Deseja Voltar ao Menu?\n 1-SIM\n 2-NÃO: "));
				if (resp == 1) {
					MenuPrograma();
				//break;
				} else {
					return al.sair();
				}
				//break;
			default: JOptionPane.showMessageDialog(null, "Valor invalido, Tente novamente.");
			return MenuPrograma();
		}
	}
	return null;
}

}[/code]

[color=olive][/color][code]

package aluno;

import javax.swing.JOptionPane;
/**

  • class Aluno

  • Esta classe e respónsavel por guarda as principais

  • informações dos alunos como

  • nome, matricula, materias

  • e principais funções

  • cadastrar, pesquisar e sair.

  • @name class Aluno

  • @access public

  • @author 700424Marcos, 0700499Taís, 0700542Vanessa

  • @version 0.0.3
    */
    public class Aluno {

    public static String nome[] = new String[5];
    public int matricula = 0;
    public static String materia[] = { “Portugues”, “Matematica”, “Ciencias”, “Estudos Sociais” };
    public float nota[][] = new float[10][10];
    public float media[][] = new float[10][10];
    public float diaAula[] = new float[4];
    public float frequencia[] = new float[4];
    public float diaFalta[] = new float[4];
    public float falta[] = new float[4];
    public static int qtdAluno = 0;
    public float total;
    int c, n, i, m = 0;
    /**

    • principal função saber quantos alunos o usuário quer cadastrar
    • Caso seja digitado um valor invalido retornara uma mensagem de erro.
    • @name qtdAluno()
    • @access public
    • @type int
    • @since
    • */

    public int qtdAluno() {
    qtdAluno = Integer.parseInt(JOptionPane.showInputDialog(“Digite a quantidade de alunos para cadastro”));
    c = qtdAluno;
    System.out.println("Quantidade " + c);
    if (qtdAluno == 0) {
    JOptionPane.showMessageDialog(null, “Quantidade inválida”);
    qtdAluno();
    } else {

     }
     return c;
    

    }
    /**

    • Responsavel por guardar os dados digitados pelo usuário
      • como nome do aluno, quantidade de aluno, matérias.
    • @name cadastraAluno()
    • @access public
    • @type String[]
    • @return nome
    • */
      public String[] cadastraAluno() {
      for (c = 0; c <= qtdAluno - 1; c++) {
      nome[c] = JOptionPane.showInputDialog("Digite o nome do aluno. ");
      matricula += c;
      System.out.println("matricula " + matricula + " nome " + nome[c]);
      }
      // System.out.println("matricula " + matricula + "nome " + nome[c]);
      materia[c] += (“MATERIAS:” + materia[c]);
      return nome;
      }

    /**

    • Responsável por buscar as matérias já cadastradas
    • @name materia()
    • @acess public
    • @type String[]
    • @return materia

    /
    public String[] materia() {
    for (m = 0; m < materia.length; m++) {
    System.out.println("MATERIAS: " + materia[m]);
    }
    return materia;
    }
    /
    *

    • principal função gerar relatorio com os sequintes dados:
      *nome, matricula, materias com as médias.

    • @name relatorio()

    • @access public

    • @type String

    • @return null

    • /
      public String relatorio() {
      for (c = 1; c <= 2; c++) {
      for (m = 1; m <= 4; m++) {
      JOptionPane.showMessageDialog(null, “nome aluno\n” + nome[c]
      + “matricula\n” + matricula + “media\n” + media[i]
      + “\nmaterias:\n” + materia[m]);
      }
      }
      return null;
      }
      /
      *

    • principal função captura a opção de saida do programa

      • digitada pelo usuário e fecha o programa
    • @name sair()

    • @access public

    • @type String

    • @return “”

    • /
      public String sair() {
      JOptionPane.showMessageDialog(null, “Fim do programa”);
      System.exit(0);
      return “”;
      }
      /
      *

    • Responsavel por buscar os dados e calcular as notas e

      • médias digitados pelo usuário
    • @name frequencia()

    • @access public

    • @param boolean

    • */
      public boolean frequencia() {
      System.out.println(“inicio frequencia.”);
      for (c = 0; c <= qtdAluno; c++) {
      diaAula[i] = Float.parseFloat(JOptionPane
      .showInputDialog("digite o total de aulas do aluno ? "));
      falta[i] = Float.parseFloat(JOptionPane
      .showInputDialog("digite o total de faltas do aluno ? "));

       frequencia[i] = (float) (diaAula[i] * 0.75);
       diaFalta[i] = diaAula[i] - falta[i];
       System.out.println("frequencia" + frequencia);
       System.out.println("diaFalta" + diaFalta[i]);
      

      }
      if (diaFalta[i] <= frequencia[i]) {
      System.out.println(“Aluno reprovado.”);
      return false;
      } else {
      System.out.println(“Aluno aprovado.”);
      return true;
      }
      }

    /**

    • Responsavel em dar mensagem se aprovado ou reprovado
      • de acordo com a média do aluno
    • @name aprovacao()
    • @access public
    • @param boolean
    • */
      public boolean aprovacao() {
      for (i = 0; i < 2; i++) {
      if ((media[i][c] == 6) && (frequencia() == false)) {
      System.out.println(“Reprovado por faltas”);
      return false;
      } else if ((media[i][c] < 6) && (frequencia() == true)) {
      System.out.println(“aprovado”);
      return true;
      } else if (frequencia() == true) {
      System.out.println(“reprovado por nota”);
      return false;
      } else {
      System.out.println(“Reprovado por faltas e notas.”);
      return true;
      }
      }
      return false;
      }
      }[/code]

Com o Erro

[color=red]
java.lang.ArrayIndexOutOfBoundsException: 4
at avaliacao.Avaliacao.mediaAluno(Avaliacao.java:34)
at menu.Menu.MenuPrograma(Menu.java:25)
at aluno.Programa.main(Programa.java:17)
[/color]

Esse erro é porque vc está tentando acessar um índice inválido de array.

Dá uma olhada nessa linha:

if ((media[i][c] == 6) && (frequencia() == false)) {  
             

veja se o valor da variavel c está correto

Altera esse cara:

.
.
.

//coloque o < e nao o <=
     for (c = 0; c<Aluno.qtdAluno; c++) {  
                 for (m =0; m<Aluno.materia.length; m++) {  

.
.
.
para percorrer um array

for (int x = 0; x < SEU_ARRAY.length; x++) {System.out.println(SEU_ARRAY[x]);}

Altere esse cara tbem

  public int qtdAluno() {  
         qtdAluno = Integer.parseInt(JOptionPane.showInputDialog("Digite a quantidade de alunos para cadastro"));  
         c = qtdAluno;  
         System.out.println("Quantidade " + c);  
         if (qtdAluno == 0) {  
             JOptionPane.showMessageDialog(null, "Quantidade inválida");  
             qtdAluno();  
         } else {  
nome = new String[qtdAluno] ;
         }  
         return c;  
     }  

[quote=mduques]Altera esse cara:

.
.
.

//coloque o < e nao o <=
     for (c = 0; c<Aluno.qtdAluno; c++) {  
                 for (m =0; m<Aluno.materia.length; m++) {  

.
.
.
para percorrer um array

for (int x = 0; x < SEU_ARRAY.length; x++) {System.out.println(SEU_ARRAY[x]);}

Altere esse cara tbem

public int qtdAluno() { qtdAluno = Integer.parseInt(JOptionPane.showInputDialog("Digite a quantidade de alunos para cadastro")); c = qtdAluno; System.out.println("Quantidade " + c); if (qtdAluno == 0) { JOptionPane.showMessageDialog(null, "Quantidade inválida"); qtdAluno(); } else { nome = new String[qtdAluno] ; } return c; } [/quote]

Ele ainda continua somando as notas das matérias…