IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Code OCR ne s'éxecute pas, ArrayOutOfBoundsException


Sujet :

Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 18
    Par défaut Code OCR ne s'éxecute pas, ArrayOutOfBoundsException
    Bonjour !

    Je suis en train d'élaborer un code pour une applet de reconnaissance optique de caractères (OCR).
    La présente méthode est une méthode de test visant à reconnaitre un caractère, représenté par la variable string recup (au format binaire), à comparer avec toute une banque de variables, les StringFeatures[]. Si laest reconnu à une approximation pres, c'est à dire que si 32/35 des caractères qui la composent correspondent, alors la variable match se lève.
    Cependant je n'arrive pas à faire reconnaître le caractère. J'ai toujours des problêmes de ArrayOutOfBoundsException quand je run... Je pense qu'il y a un problème dans mes boucles et aussi dans ma méthode main...
    Voyez vous même. Si vous voulez plus d'infos demandez moi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    public class DiscriminantLignes {
     
     
        static boolean match = true;
     
      /**
       * @return
       */
      public static char Reconaissance() {
     
          char recchar ;
     
    //Booléen qui se mettra en true si la lettre est reconnue et activera le processus de communication
     
    //Tableau de caractères, sachant que CorrLetter[i] correspond à Features[i].
            char[] CorrLetter;
            CorrLetter = new char[2];
            CorrLetter[1] = 'A';
            CorrLetter[2] = 'B';
     
    //Tableau de string tel que les long de Features correspondent aux string de StringFeatures
     
        String[] StringFeatures;
        StringFeatures = new String[2];
        StringFeatures[1] = "00110001100111001010111111100110001";
        StringFeatures[2] = "11111100011000111111100111000110111";
     
    //Je met ça en attendant de voir comment je récup le caractere ! ça représente 
    //l'image binarisée puis transformée en un string.
            String recup = "11111100011000111111100111000110111";
          //  String recups = String.valueOf(recup);
     
            while(match)
            {
              for(int j=0; j<3; j++){
                int counter = 0;
                for(int i=0; i<36; i++) 
                 {
                   if (recup.charAt(i)== StringFeatures[j].charAt(i))
                  {counter++;}
                 }
                if (counter > 32)
                {match = false;
                recchar = CorrLetter[j];}
              }    
     
            System.out.println("Le caractère reconnu estt "+ recchar);
            }
            return recchar;
        }
     
         public static void main(String[] args)
           {
           char Caractere = Reconaissance();
           System.out.println("le caractère reconnu est " + Caractere);  
           }
    }
    En l'occurence, si vous comprenez bien le code, le caractere reconnu devrait etre un B.
    J'aimerais savoir ce qui ne va pas s'il vous plait !
    Merci d'avance !

  2. #2
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Ton IndexOutOfBound apparait dès l'initialisation (en Java, les index commencent à 0, donc pour un tableau de 2 éléments, les index sont 0 et 1) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            CorrLetter = new char[2];
            CorrLetter[1] = 'A';
            CorrLetter[2] = 'B';
    Tu aurais pu t'en apercevoir en lisant la stack trace, qui est explicite sur l'endroit où l'exception est levée

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 18
    Par défaut
    Hey !
    Merci beaucoup, tu as évidemment raison, surtout que je ne suis pas cohérent car je dis à j de partir de 0 dans ma condition mais les cases j=0 sont vides...
    Je ne connaissait pas le principe de la stacktrace, j'ai regardé ça sur google... Je pense que je paie mon manque d'assiduité durant les cours d'info...

    Pour ceux que ça intéresse, voici le programme qui fonctionne. J'ai fait sauter le while car il plantait sur mon jeux de test mais je vais le réimplenter quand j'aurai 5 minutes et les idées un peu plus clair.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    public class DiscriminantLignes {
     
      //Booléen qui se mettra en true si la lettre est reconnue et activera le processus de communication
        static boolean match = true;
        static char recchar ;
      /**
       * @return
       */
      public static char Reconaissance() {
     
     
    //Tableau de caractères, sachant que CorrLetter[i] correspond à Features[i].
        char[] CorrLetter;
        CorrLetter = new char[3];
        CorrLetter[0] = 'A';
        CorrLetter[1] = 'B';
        CorrLetter[2] = 'C';
     
    //Tableau de string tel que les long de Features correspondent aux string de StringFeatures
     
        String[] StringFeatures;
        StringFeatures = new String[3];
        StringFeatures[0] = "00110001100111001010111111100110001";
        StringFeatures[1] = "11111100011000111111100111000110111";
        StringFeatures[2] = "11111100001000010000100001100001111";
     
    //Je met ça en attendant de voir comment je récup le caractere ! ça représente 
    //l'image binarisée puis transformée en un string.
     
    //----------JEU DE TEST------------//
     
            //Un B -> reconnu
            String recup = "11111100011000111111100111000110111";
            //Un B avec 2 fautes -> reconnu
            //String recup = "11111100011001011111100111000110111";
            //Un B avec 4 fautes -> non reconnu
            //String recup = "11111100011000110000100111000110111";
            //Un C -> reconnu
            //String recup = "11111100001000010000100001100001111";
     
              for(int j=0; j<3; j++){
                int counter = 0;
                for(int i=0; i<35; i++) 
                 {
                   if (recup.charAt(i)== StringFeatures[j].charAt(i))
                  {counter++;}
                 }
                if (counter > 32)
                {match = false;
                recchar = CorrLetter[j];}
                }    
     
              if ((match)) 
                {
                System.out.println("aucun caractère reconnu");
                }
              else 
                {
                System.out.println("Le caractère reconnu est "+ recchar);
                }
     
        return recchar;
        }
     
         public static void main(String[] args)
           {
          char Caractere = Reconaissance();
           }
    }

Discussions similaires

  1. [Mail] Les codes PHP ne s'executent pas
    Par Rajhonson dans le forum Langage
    Réponses: 4
    Dernier message: 28/11/2006, 13h40
  2. [JMF] Code fonctionnant sous Linux mais pas sous XP
    Par Monsieur_Max dans le forum Multimédia
    Réponses: 4
    Dernier message: 25/05/2006, 18h57
  3. Réponses: 5
    Dernier message: 14/05/2006, 22h41
  4. probleme code vba ne s'execute pas apres instruction sql
    Par arnogef dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 29/12/2005, 12h34
  5. Réponses: 5
    Dernier message: 26/09/2004, 19h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo