Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1

2 respostas
Nader_Daher

Olá, tenho uma aplicação simples, uma rede neural, e estou com esse problema

o codigo é o seguinte:

import java.util.Scanner;
import javax.swing.JOptionPane;

public class perceptron_multilayer {
// Definição de Constantes

    final static int NCAMOCULTA = 1; // número de camadas ocultas
    final static int OCULTA = 2; // número de neurônios da camada oculta
    final static int ENTRADA = 2;  // número de neurônios da camada de entrada
    final static int SAIDA = 1;  // número de neurônios da camada de saida
    final static int EXEMPLOS = 1; // numero de exemplos de entrada para treinamento

    //Início da Declaração das Variáveis Globais
    static double W[][][] = new double[30][30][30],  BIAS[][] = new double[30][30], // os números 3 se devem ao fato de não se saber quando é escondida ou saida
             X[][] = new double[EXEMPLOS][30], //vetores de entrada
             D[][] = new double[EXEMPLOS][30], //vetores de saida
             ERRO[][] = new double[EXEMPLOS][30],  NI[][] = new double[30][30],  PHI[][] = new double[30][30],  ERRODES, //valor do erro desejável ou aceitável
             ETA, //taxa de aprendizagem
             ERROINST, // Erro Instantâneo
             ERROMG = 0, //Erro Médio Global
             PHILINHA[][] = new double[30][30],//vetor de philinha para correção
             DELTA[][] = new double[30][30]; //vetor dos deltas para correção dos pesos e bias
    static int K,  I,  J,  A,  B,  VAR,  EPOCAS, //numero de epocas de treinamento
             FUNCAO;

  /*  static int k = K + 1;
    static int i = I + 1;
    static int j = J + 1;*/
//Término da Declaração das Variáveis Globais

    //Programa Principal
    public static void main(String[] args) {

        EntradaBiasePesosIniciais();
        SaidaBiasePesosIniciais();
        EntraEpocas();
        PreencheVetorEntrada();
        PreencheVetorSaida();
        PreencheOutrasConfiguracoes();
        ProcessoIterativo();
        System.out.printf("........................\n");
      //  System.out.println("PAUSE");
        JOptionPane.showMessageDialog(null, "PAUSE");

    }
//Término do Programa Principal

    /* Função de Processo Iterativo*/
    /* Função de Processo Iterativo*/
    static void ProcessoIterativo() {
       // System.out.printf("Iniciando o processo iterativo...\n");
          JOptionPane.showMessageDialog(null,"Iniciando o processo iterativo...\n");
        for (A = 0; A < EPOCAS; A++) {
            for (B = 0; B < EXEMPLOS; B++) {

                //Calcula ni e phi da camada de entrada
                for (I = 0; I < OCULTA; I++) {
                    NI[0][I] = 0; // k de camada e i de neurônio
                    for (J = 0; J < ENTRADA; J++) {
                        NI[0][I] = NI[0][I] + W[0][J][I] * X[B][J];
                    }
                    NI[0][I] = NI[0][I] + BIAS[0][I];
                    //System.out.printf("NI[1][%d] = %f\n", I+1, NI[0][I]);
                    switch (FUNCAO) {
                        case 1:
                            if (NI[0][I] > 0) {
                                PHI[0][I] = 1;
                            } else {
                                PHI[0][I] = 0;
                            }
                            break;
                        case 2:
                            PHI[0][I] = 1 / (1 + Math.exp(-NI[0][I]));
                            break;
                    }//fim do switch case
                //System.out.printf("PHI[1][%d] = %f\n", I+1, PHI[0][I]);
                }//fim do for i

                //Calcula ni e phi das camadas restantes
                for (K = 1; K < NCAMOCULTA + 1; K++) {
                    if (K == NCAMOCULTA) {
                        VAR = SAIDA; //última camada - ni da camada de saida
                    } else {
                        VAR = OCULTA; //camadas intermediárias - ni das camadas intermediárias
                    }
                    for (I = 0; I < VAR; I++) {
                        NI[K][I] = 0;
                        for (J = 0; J < OCULTA; J++) {
                            NI[K][I] = NI[K][I] + W[K][J][I] * PHI[K - 1][J];
                        }
                        NI[K][I] = NI[K][I] + BIAS[K][I];
                        //System.out.printf("NI[%d][%d] = %f\n", K+1, I+1, NI[K][I]);
                        switch (FUNCAO) {
                            case 1:
                                if (NI[K][I] > 0) {
                                    PHI[K][I] = 1;
                                } else {
                                    PHI[K][I] = 0;
                                }
                                break;
                            case 2:
                                PHI[K][I] = 1 / (1 + Math.exp(-NI[K][I]));
                                break;
                        }//fim do case
                        if (K == NCAMOCULTA) {
                            int k = K +1;
                            int i = I + 1;
                            System.out.printf("PHI[%d][%d] = %f\n", K + 1, I + 1, PHI[K][I]);
                            JOptionPane.showMessageDialog(null, "PHI["+k+"]["+i+"] =\n"+PHI[K][I]);
                        }
                    } //fim do for i
                } // fim do K
                  /* Cálculo do Erros */
                for (K = 1; K < NCAMOCULTA + 1; K++) {
                    for (I = 0; I < SAIDA; I++) {
                        ERRO[K][I] = D[B][I] - PHI[K][I];
                      //  System.out.printf("DESEJADO[%d][%d] = %f\n", B + 1, I + 1, D[B][I]);
                      //  System.out.printf("ERRO[%d][%d] = %f\n", K + 1, I + 1, ERRO[K][I]);
                        int k = K +1;
                        int i = I + 1;
                        int b = B + 1;
                         JOptionPane.showMessageDialog(null, "DESEJADO["+b+"]["+i+"] =\n" + D[B][I]);
                         JOptionPane.showMessageDialog(null, "ERRO["+k+"]["+i+"] = %d\n" + ERRO[K][I]);
                    }
                    ERROINST = 0;
                    for (I = 0; I < SAIDA; I++) {
                        ERROINST = ERROINST + ERRO[K][I] * ERRO[K][I] / 2;
                    }
                    ERROMG = (ERROMG * (A * EXEMPLOS + B) + ERROINST) / (A * EXEMPLOS + (B + 1));
                    //System.out.printf("ERROMG = %f\n", ERROMG);
                    if (ERROMG < ERRODES) {
                        break;
                    }
                /* Fim Cálculo do Erros */
                } // fim do K

                /* retropropagação do erro */

                /* cálculo de philinha e delta */

                /* cálculo de philinha e delta da última camada*/
                for (I = 0; I < SAIDA; I++) {
                    PHILINHA[NCAMOCULTA][I] = Math.exp(-NI[NCAMOCULTA][I]) / ((1 + Math.exp(-NI[NCAMOCULTA][I])) * (1 + Math.exp(-NI[NCAMOCULTA][I])));
                    DELTA[NCAMOCULTA][I] = -ERRO[NCAMOCULTA][I] * PHILINHA[NCAMOCULTA][I];
                //System.out.printf("PHILINHA[%d][%d] = %f\n", NCAMOCULTA+1, I+1, PHILINHA[NCAMOCULTA][I]);
                //System.out.printf("DELTA[%d][%d] = %f\n", NCAMOCULTA+1, I+1, DELTA[NCAMOCULTA][I]);
                }
                /* cálculo de philinha e delta das camadas intermediarias*/

                for (K = 1; K < NCAMOCULTA; K++) {
                    for (I = 0; I < OCULTA; I++) {
                        PHILINHA[K][I] = Math.exp(-NI[K][I]) / ((1 + Math.exp(-NI[K][I])) * (1 + Math.exp(-NI[K][I])));
                        //System.out.printf("PHILINHA[%d][%d] = %f\n", K+1, I+1, PHILINHA[K][I]);
                        DELTA[K][I] = 0;
                        for (J = 0; J < OCULTA; J++) {
                            DELTA[K][I] = DELTA[K][I] + PHILINHA[K][I] * DELTA[K + 1][J] * W[K + 1][I][J];
                        }
                    //System.out.printf("DELTA[%d][%d] = %f\n", K+1, I+1, DELTA[K][I]);
                    }
                }

                /* cálculo de philinha e delta da primeira camada*/
                for (I = 0; I < OCULTA; I++) {
                    PHILINHA[0][I] = Math.exp(-NI[0][I]) / ((1 + Math.exp(-NI[0][I])) * (1 + Math.exp(-NI[0][I])));
                    //System.out.printf("PHILINHA[1][%d] = %f\n", I+1, PHILINHA[0][I]);
                    DELTA[0][I] = 0;
                    for (J = 0; J < OCULTA; J++) {
                        DELTA[0][I] = DELTA[0][I] + PHILINHA[0][I] * DELTA[1][J] * W[1][I][J];
                    }
                //System.out.printf("DELTA[1][%d] = %f\n", I+1, DELTA[0][I]);
                }

                /* Ajuste dos pesos e dos bias  */

                //ajuste das outras camadas
                for (K = 1; K < NCAMOCULTA + 1; K++) {
                    if (K == NCAMOCULTA) {
                        VAR = SAIDA; //última camada - ni da camada de saida
                    } else {
                        VAR = OCULTA; //camadas intermediárias - ni das camadas intermediárias
                    }
                    for (I = 0; I < VAR; I++) {
                        for (J = 0; J < OCULTA; J++) {
                            W[K][J][I] = W[K][J][I] - ETA * DELTA[K][I] * PHI[K - 1][J];
                        //System.out.printf("W[%d][%d][%d] = %f\n", K+1, J+1, I+1, W[K][J][I] );
                        }
                        BIAS[K][I] = BIAS[K][I] - ETA * DELTA[K][I] * PHI[K - 1][I];
                    //System.out.printf("BIAS[%d][%d] = %f\n", K+1, I+1, BIAS[K][I] );
                    }
                }
                //ajuste da primeira camada
                for (I = 0; I < OCULTA; I++) {
                    for (J = 0; J < ENTRADA; J++) {
                        W[0][J][I] = W[0][J][I] - ETA * DELTA[0][I] * X[B][J];
                    //System.out.printf("W[1][%d][%d] = %f\n", J+1, I+1, W[0][J][I] );
                    }
                    BIAS[0][I] = BIAS[0][I] - ETA * DELTA[0][I] * X[B][I];
                //System.out.printf("BIAS[1][%d] = %f\n", I+1,  BIAS[0][I] );
                }


//??????

                if (ERROMG < ERRODES) {
                   // System.out.printf("Finalizado pelo erro em %d epocas de treinamento!\n", X);
                    JOptionPane.showMessageDialog(null, "Finalizado pelo erro em "+ X +" epocas de treinamento!\n");
                    break;
                }
            } // fim do B
        } // fim do A
    }
    /* Término Função de Processo Iterativo*/


    /* Função de Entrada de Bias e Pesos Iniciais*/
    static void EntradaBiasePesosIniciais() {

      //  System.out.printf("Bias e pesos iniciais...\n");
        JOptionPane.showMessageDialog(null, "Bias e pesos iniciais...\n");

        //Entrada dos Pesos Iniciais e Bias
        for (K = 0; K < NCAMOCULTA + 1; K++) {
            if (K == 0) //primeira camada
            {
              //  System.out.printf("ENTRADA e 1 a. CAMADA OCULTA...\n");
                 JOptionPane.showMessageDialog(null, "ENTRADA e 1 a. CAMADA OCULTA...\n");

                for (I = 0; I < ENTRADA; I++) {
                    for (J = 0; J < OCULTA; J++) {
                       // System.out.printf("Informe o peso entre o neuronio %d da camada de entrada e o neuronio %d da 1a. camada oculta :", I + 1, J + 1);
                     //   System.out.printf("Informe W[%d][%d][%d]:", K + 1, I + 1, J + 1);
                        int i = I + 1;
                        int j = J + 1;
                        int k = K + 1 ;

                    W[K][I][J] =  Double.parseDouble(JOptionPane.showInputDialog("Informe o peso entre o neuronio "+ i +" da camada de entrada e o neuronio "+j+" da 1a. camada oculta :\n" +
                                "Informe W["+k+"]["+i+"]["+j+"]:"));
                      /*  Scanner in = new Scanner(System.in);
                        W[K][I][J] = in.nextDouble();*/
                    //scanf("%f", &W[K][I][J]);
                    }
                }
                for (I = 0; I < OCULTA; I++) {
                    int i = I + 1;
                    int j = J + 1;
                    int k = K + 1 ;
                  /*  System.out.printf("Informe o bias do neuronio %d da 1a. camada oculta :", I + 1);
                    System.out.printf("Informe BIAS[%d][%d]:", K + 1, I + 1);
                    Scanner in = new Scanner(System.in);
                    BIAS[K][I] = in.nextDouble();*/
                //scanf("%f", &BIAS[K][I]);

                    BIAS[K][I] =  Double.parseDouble(JOptionPane.showInputDialog("Informe o bias do neuronio "+ i +"da 1a. camada oculta :\n" +
                                "Informe BIAS["+k+"]["+i+"]"));
                }
            } else if (K == NCAMOCULTA) //ultima camada
            {
                System.out.printf("%d a. CAMADA OCULTA e SAIDA\n", K);
                for (I = 0; I < OCULTA; I++) {
                    for (J = 0; J < SAIDA; J++) {
                         int i = I + 1;
                         int j = J + 1;
                         int k = K + 1 ;
                    /*    System.out.printf("Informe o peso entre o neuronio %d da %d a. camada oculta e o neuronio %d da camada de saida :", I + 1, K, J + 1);
                        System.out.printf("Informe W[%d][%d][%d]:", K + 1, I + 1, J + 1);
                        Scanner in = new Scanner(System.in);
                        W[K][I][J] = in.nextDouble();*/
                        
                       W[K][I][J] = Double.parseDouble(JOptionPane.showInputDialog("Informe o peso entre o neuronio "+i+" da "+k+" a. camada oculta e o neuronio "+j+" da camada de saida :\n" +
                                "Informe W["+k+"]["+i+"]["+j+"]:"));
                    //scanf("%f", &W[K][I][J]);
                    }

                }
                for (I = 0; I < SAIDA; I++) {
                     int i = I + 1;
                     int j = J + 1;
                     int k = K + 1 ;
                  /*  System.out.printf("Informe o bias do neuronio %d da camada de saida :", I + 1);
                    System.out.printf("Informe BIAS[%d][%d]:", K + 1, I + 1);
                    Scanner in = new Scanner(System.in);
                    BIAS[K][I] = in.nextDouble();*/
                    
                    BIAS[K][I] = Double.parseDouble(JOptionPane.showInputDialog("Informe o bias do neuronio "+i+" da camada de saida :\n" +
                                "Informe BIAS["+k+"]["+i+"]:"));
                    
                //scanf("%f", &BIAS[K][I]);
                }
            } else //camadas ocultas
            {
                int k = K + 1 ;
               // System.out.printf("%d a. CAMADA OCULTA e %d a. CAMADA OCULTA\n", K, K + 1);
                JOptionPane.showMessageDialog(null, ""+K+" a. CAMADA OCULTA e "+k+" a. CAMADA OCULTA\n");
                for (I = 0; I < OCULTA; I++) {
                    for (J = 0; J < OCULTA; J++) {
                         int i = I + 1;
                         int j = J + 1;
                        
                      /*  System.out.printf("Informe o peso entre o neuronio %d da %d a. camada oculta e o neuronio %d da %d a. camada oculta :", I + 1, K, J + 1, K + 1);
                        System.out.printf("Informe W[%d][%d][%d]:", K + 1, I + 1, J + 1);
                        Scanner in = new Scanner(System.in);
                        W[K][I][J] = in.nextDouble();*/
                        
                      W[K][I][J] =  Double.parseDouble(JOptionPane.showInputDialog("Informe o peso entre o neuronio "+i+" da "+K+" a. camada oculta e o neuronio "+j+" da "+k+" a. camada oculta :\n" +
                                "Informe W["+k+"]["+i+"]["+j+"]:"));
                        
                    // scanf("%f", &W[K][I][J]);
                    }
                }
                for (I = 0; I < OCULTA; I++) {

                    int i = I + 1;
                    
                   /* System.out.printf("Informe o bias do neuronio %d da %d camada oculta :", I + 1, K + 1);
                    System.out.printf("Informe BIAS[%d][%d]:", K + 1, I + 1);
                    Scanner in = new Scanner(System.in);
                    BIAS[K][I] = in.nextDouble();*/
                    
                   BIAS[K][I] = Double.parseDouble(JOptionPane.showInputDialog("Informe o bias do neuronio "+i+" da "+k+" camada oculta :\n" +
                                "Informe BIAS["+k+"]["+i+"]:"));
                // scanf("%f", &BIAS[K][I]);
                }
            }
        }

    /*  W[0][0][0] = 0.7;
    W[0][0][1] = -0.8;
    W[0][1][0] = 0.5;
    W[0][1][1] = -0.6;
    W[1][0][0] = -0.3;
    W[1][0][1] = 0.4;
    W[1][1][0] = 0.5;
    W[1][1][1] = -0.7;
    W[2][0][0] = 0.8;
    W[2][1][0] = -0.5;
    BIAS[0][0] = 0.5;
    BIAS[0][1] = -0.7;
    BIAS[1][0] = 0.6;
    BIAS[1][1] = -0.8;
    BIAS[2][0] = 0.4;

    System.out.printf("PESOS E BIAS PREENCHIDOS AUTOMATICAMENTE\n");*/
    }
    /* Término Função de Entrada de Bias e Pesos Iniciais*/

    /* Função de Saída de Bias e Pesos Iniciais*/
    static void SaidaBiasePesosIniciais() {

        //Apresentação dos Pesos Iniciais e Bias
    //    System.out.printf("Pesos iniciais e Bias :\n");
        JOptionPane.showMessageDialog(null,"Pesos iniciais e Bias :");
        for (K = 0; K < NCAMOCULTA + 1; K++) {
            if (K == 0) {
               // System.out.printf("ENTRADA e 1 a. CAMADA OCULTA...");
                JOptionPane.showMessageDialog(null,"ENTRADA e 1 a. CAMADA OCULTA...:");
                for (I = 0; I < ENTRADA; I++) {
                    for (J = 0; J < OCULTA; J++) {
                        int i = I + 1;
                         int j = J + 1;
                         int k = K + 1 ;
                       // System.out.printf("Peso entre o neuronio %d da camada de entrada e o neuronio %d 1a. camada oculta = %f\n", I + 1, J + 1, W[K][I][J]);
                        
                         JOptionPane.showMessageDialog(null,"Peso entre o neuronio "+i+" da camada de entrada e o neuronio "+j+" 1a. camada oculta = \n"+W[K][I][J]);
                    }
                }
                        int i = I + 1;
                        int j = J + 1;
                         int k = K + 1 ;
                //System.out.printf("W[%d][%d][%d] = %f\n", K + 1, I + 1, J + 1, W[K][I][J]);
                         
                JOptionPane.showMessageDialog(null,"W["+k+"]["+i+"]["+j+"] = "+W[K][I][J]);
                   
                for (I = 0; I < OCULTA; I++) //printf("Bias do neuronio %d da 1a. camada oculta = %f\n", I+1, K+1, BIAS[K][J]);
                {
                   
                    //System.out.printf("BIAS[%d][%d] = %f\n", K + 1, I + 1, BIAS[K][I]);
                    
                    JOptionPane.showMessageDialog(null,"BIAS["+k+"]["+i+"] = "+BIAS[K][I]);
                }
            } else if (K == NCAMOCULTA) {
              //  System.out.printf("%d a. CAMADA OCULTA e SAIDA\n", K);
                
                 JOptionPane.showMessageDialog(null,""+K+"a. CAMADA OCULTA e SAIDA");
                for (I = 0; I < OCULTA; I++) {
                    for (J = 0; J < SAIDA; J++) //printf("Peso entre o neuronio %d da %d a. camada oculta e o neuronio %d da camada de saida = %f\n", I+1, K, J+1, W[K][I][J]);
                    {
                        int i = I + 1;
                         int j = J + 1;
                         int k = K + 1 ;
                         
                      //  System.out.printf("W[%d][%d][%d] = %f\n", K + 1, I + 1, J + 1, W[K][I][J]);
                        
                         JOptionPane.showMessageDialog(null,"W["+k+"]["+i+"]["+j+"] ="+W[K][I][J]);
                    }
                }
                for (I = 0; I < SAIDA; I++) //printf("Bias do neuronio %d da camada de saida = %f\n", I+1, BIAS[K][J]);
                {
                         int i = I + 1;
                         int k = K + 1 ;
                         
                    //System.out.printf("BIAS[%d][%d] = %f\n", K + 1, I + 1, BIAS[K][I]);
                    
                    JOptionPane.showMessageDialog(null,"BIAS["+k+"]["+i+"] = "+BIAS[K][I]);
                }
            } else {
                int k = K + 1 ;
                //System.out.printf("%d a. CAMADA OCULTA e %d a. CAMADA OCULTA\n", K, K + 1);
                
                JOptionPane.showMessageDialog(null,""+K+"a. CAMADA OCULTA e "+k+"a. CAMADA OCULTA");
                
                for (I = 0; I < OCULTA; I++) {
                        
                         int i = I + 1;
                         int j = J + 1;
                   
                   // System.out.printf("Bias do neuronio %d da %d camada oculta = %f\n", I + 1, K, BIAS[K][I]);
                    
                    JOptionPane.showMessageDialog(null,"Bias do neuronio "+i+" da "+K+" camada oculta = "+BIAS[K][I]);
                    for (J = 0; J < OCULTA; J++) //printf("Peso entre o neuronio %d da %d a. camada oculta e o neuronio %d da %d a. camada oculta = %f\n", I+1, K, J+1, K+1, W[K][I][J]);
                    {
                        //System.out.printf("W[%d][%d][%d] = %f\n", K + 1, I + 1, J + 1, W[K][I][J]);
                        
                        JOptionPane.showMessageDialog(null,"W["+k+"]["+i+"]["+j+"] = "+W[K][I][J]);
                    }
                }
                for (I = 0; I < OCULTA; I++) //printf("Bias do neuronio %d da %d camada oculta = %f\n", I+1, K+1, BIAS[K][J]);
                {
                      int i = I + 1;
                     
                         
                    //System.out.printf("BIAS[%d][%d] = %f\n", K + 1, I + 1, BIAS[K][I]);
                    
                    JOptionPane.showMessageDialog(null,"BIAS["+k+"]["+i+"] = "+BIAS[K][I]);
                }
            }
        }

    }
    /* Término Função de Saida de Bias e Pesos Iniciais*/

    static void EntraEpocas() {

    /*    System.out.printf("Entre com o numero de epocas de treinamento:\n");
        Scanner in = new Scanner(System.in);
        EPOCAS = in.nextInt();*/
        
        EPOCAS = Integer.parseInt(JOptionPane.showInputDialog("Entre com o numero de epocas de treinamento:"));
    //scanf("%d", &EPOCAS);

//  EPOCAS = 100;
    //   System.out.printf("NUMERO DE EPOCAS PREENCHIDOS AUTOMATICAMENTE\n");

    }

    static void PreencheVetorEntrada() {

//Preenchimento dos vetores de entrada
        //System.out.printf("Entre com os vetores de exemplos de treinamento de entrada:\n");
        
        JOptionPane.showMessageDialog(null,"Entre com os vetores de exemplos de treinamento de entrada:");
        for (I = 0; I < EXEMPLOS; I++) {
           int i = I+1;
        //    System.out.printf("Informe o numero binario que representa o %d o. elemento de treinamento\n", I + 1);
            
            JOptionPane.showMessageDialog(null,"Informe o numero binario que representa o "+i+" o. elemento de treinamento");
            
            for (J = 0; J < ENTRADA; J++) {
                int j = J +1;
                
            /*    System.out.printf("Informe o %d o. numero:", J + 1);
                Scanner in = new Scanner(System.in);
                X[I][J] = in.nextDouble();*/
                
                X[I][J] = Double.parseDouble(JOptionPane.showInputDialog("Informe o "+j+"o. numero:"));
            // scanf("%f", &X[I][J]);
            }
        }


    /*  X[0][0] = 1;
    X[0][1] = 1;*/
    //  System.out.printf("VETORES DE ENTRADA PREENCHIDOS AUTOMATICAMENTE\n");

    }

    static void PreencheVetorSaida() {

//Preenchimento dos vetores de saida
       // System.out.printf("Entre com os vetores de exemplos de treinamento de saida:\n");
 
         JOptionPane.showMessageDialog(null,"Entre com os vetores de exemplos de treinamento de saida:\n");
        for (I = 0; I < EXEMPLOS; I++) {
            int i = I+1;
            
          //  System.out.printf("Preencha os valores que representam as saidas esperadas do %d o.elemento\n", I + 1);
            
            JOptionPane.showMessageDialog(null,"Preencha os valores que representam as saidas esperadas do "+i+" o.elemento\n");
            for (J = 0; J < SAIDA; J++) {
                
                int j = I+1;
                /*System.out.printf("Informe o %d o. numero:", J + 1);
                Scanner in = new Scanner(System.in);
                D[I][J] = in.nextDouble();*/
                
                D[I][J] = Double.parseDouble(JOptionPane.showInputDialog("Informe o "+j+" o. numero:\n"));

            //scanf("%f", &D[I][J]);
            }
        }


    //    D[0][0] = 0;
    //         System.out.printf("VETORES DE SAIDA PREENCHIDOS AUTOMATICAMENTE\n");
    }

    static void PreencheOutrasConfiguracoes() {
//Outras configurações

      /*  System.out.printf("Entre com o valor da taxa de aprendizagem:\n");
        Scanner in = new Scanner(System.in);
        ETA = in.nextDouble();*/
        //scanf("%f", &ETA);
        
         ETA = Double.parseDouble(JOptionPane.showInputDialog("Entre com o valor da taxa de aprendizagem:\n"));

       /* System.out.printf("Entre com o erro máximo desejado:\n");
        Scanner in2 = new Scanner(System.in);
        ERRODES = in2.nextDouble();
        //scanf("%f", &ERRODES);*/
        
         ERRODES = Double.parseDouble(JOptionPane.showInputDialog("Entre com o erro máximo desejado:\n"));


      /*  System.out.printf("Entre com funcao desejada[(1) degrau, (2)sigmoide]:\n");
        Scanner in3 = new Scanner(System.in);
        FUNCAO = in.nextInt();*/
    // scanf("%d", &FUNCAO);
        
        FUNCAO = Integer.parseInt(JOptionPane.showInputDialog("Entre com funcao desejada[(1) degrau, (2)sigmoide]:\n"));


    /*   ETA = 0.8;
    ERRODES = -1;
    FUNCAO = 2;   */
    }
}

a exception ocorre neste trecho:

for (K = 1; K < NCAMOCULTA + 1; K++) {
                    for (I = 0; I < SAIDA; I++) {
                        ERRO[K][I] = D[B][I] - PHI[K][I];
                      //  System.out.printf("DESEJADO[%d][%d] = %f\n", B + 1, I + 1, D[B][I]);
                      //  System.out.printf("ERRO[%d][%d] = %f\n", K + 1, I + 1, ERRO[K][I]);
                        int k = K +1;
                        int i = I + 1;
                        int b = B + 1;
                         JOptionPane.showMessageDialog(null, "DESEJADO["+b+"]["+i+"] =\n" + D[B][I]);
                         JOptionPane.showMessageDialog(null, "ERRO["+k+"]["+i+"] = %d\n" + ERRO[K][I]);
                    }
                    ERROINST = 0;
                    for (I = 0; I < SAIDA; I++) {
                        ERROINST = ERROINST + ERRO[K][I] * ERRO[K][I] / 2;
                    }
                    ERROMG = (ERROMG * (A * EXEMPLOS + B) + ERROINST) / (A * EXEMPLOS + (B + 1));
                    //System.out.printf("ERROMG = %f\n", ERROMG);
                    if (ERROMG < ERRODES) {
                        break;
                    }
                /* Fim Cálculo do Erros */
                } // fim do K

na terceira linha, eu sei que esse erro ocorre quando manipulamos um elemento que está fora do intervalo do array,
mas não estou conseguindo enxergar isso na aplicação :? , se alguem poder ajudar, fico grato…

2 Respostas

maior_abandonado

você ja tentou debugar o seu código para tentar descobrir por que que seu array não tem essa posição 1 (ou seja, essa posição especifica está vazia)?

dificilmente alguém vai pega o seu código (que não é la muito pequeno) e começar a analisa-lo até descobrir qual é o erro, que pela exceção que você disse que no titulo que da, é por um erro de lógica (o array não possuir a posição sendo acessada)…

Nader_Daher

Já depurei mas não consigo saber porque o array não tem essa posição…

Criado 19 de julho de 2010
Ultima resposta 19 de jul. de 2010
Respostas 2
Participantes 2