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

avec Java Discussion :

Explication de la cause d'une exception


Sujet :

avec Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 74
    Points : 29
    Points
    29
    Par défaut Explication de la cause d'une exception
    Bonjour,

    J'ai un petit problème

    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    for(i=1;i<=90;i++){
    int higher =303;
    int random = (int)lower + (int)(Math.random() * ((higher- lower) + 1));
    //int random = (int)(Math.random() * (higher-lower)+lower) ;
    //zero[i] =AlphabetManager.createSymbol(String.valueOf(random), Annotation.EMPTY_ANNOTATION);
    zero[i] =AlphabetManager.createSymbol(String.valueOf(r.nextInt(303)), Annotation.EMPTY_ANNOTATION);
    System.out.print("outing"+zero.length);
    symbols.add(zero[i]);
    }
     
    for(i=1;i<=90;i++){
     e1 = new Edit(org[i], 0, DNATools.createDNA("-"));
        sy1.edit(e1);
    }
    lorsque je lance l'exécution parfois il renvoie cette exception
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Exception in thread "main" java.lang.IndexOutOfBoundsException
    at org.biojava.bio.symbol.SimpleSymbolList.edit(SimpleSymbolList.java:323)
    et parfois il continue parfaitement, j'aimerais bien savoir pourquoi des fois il affiche cette exception ?

    Merci d'avance pour votre aide.

  2. #2
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    en consultant la doc biojava, on voit que la méthode edit peut lancer une IndexOutOfBoundsException:
    IndexOutOfBoundsException - if the edit does not lie within the SymbolList
    par conséquent ton random produit parfois un symbole qui ne fait partie de ton alphabet de départ ?
    je ne vois pas vraiment ce que tu veux réaliser avec ce random, donc je ne peux être plus précis
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

  3. #3
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 74
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par Gardyen Voir le message
    en consultant la doc biojava, on voit que la méthode edit peut lancer une IndexOutOfBoundsException:

    par conséquent ton random produit parfois un symbole qui ne fait partie de ton alphabet de départ ?
    je ne vois pas vraiment ce que tu veux réaliser avec ce random, donc je ne peux être plus précis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    for(i=1;i<=90;i++){
    int higher =303;
    int random = (int)lower + (int)(Math.random() * ((higher- lower) + 1));
    org[i] =AlphabetManager.createSymbol(String.valueOf(r.nextInt(303)), Annotation.EMPTY_ANNOTATION);
    System.out.print("outing"+zero.length);
    symbols.add(org[i]);
    }
     
    for(i=1;i<=90;i++){
     e1 = new Edit(org[i], 0, DNATools.createDNA("-"));
        sy1.edit(e1);
    }
    d'accord je vous explique je travail sur optimisation d'un alignement Multi-objectif j'ai un chromosome d'ADN d'une longueur bien définie
    par exemple: ACTG------GCCT

    et j'ai utilisé ces séquences ADN dans un algorithme génétique a la place de représenté toute la séquence je represente seulement les positions des gaps (-) dans le tableau org[i]
    donc pour créer la population initiale il faut créer plusieurs chromosomes c'est de cette raison j'ai utilisé le rondom pour donner des positions aléatoires

    puis je récupéré les positions et j’insère les gap dans la séquence .

    comment résoudre cette exception ??

  4. #4
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Pourquoi ne traites tu jamais la premier élément de tes tableaux.

    Rappel, en java (et dans tous les autres langages), l'index des tableau commence à 0 et finit à 1.

    De fait, un tableau de 90 cases aura des index allant de 0 à 89.

    De fait tes boucles sont éminemment suspicieuses en commençant à 1.
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    74
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 74
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par sinok Voir le message
    Pourquoi ne traites tu jamais la premier élément de tes tableaux.

    Rappel, en java (et dans tous les autres langages), l'index des tableau commence à 0 et finit à 1.

    De fait, un tableau de 90 cases aura des index allant de 0 à 89.

    De fait tes boucles sont éminemment suspicieuses en commençant à 1.
    je pense que c'est pas ça le problème commencer de 1 à90 ou de 0à 89 ou de 2à 91 l'essentiel il faut pas dépassé la taille du tableau

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Justement, manifestement tu semble penser que pour un tableau de taille 90 on peux accéder à l'index 90, ce qui n'est pas le cas. Et visiblement tu édite des symboles "trop loin" dans les listes interne de ta librairie.

    Pourquoi parfois exception aprfois pas? Ben je suppose que ça ne se produit que quand ton random sort la valeur 302

Discussions similaires

  1. [PHP 5.3] Instance de BDD dans une classe qui cause une exception
    Par lamouche42 dans le forum Langage
    Réponses: 5
    Dernier message: 29/10/2011, 12h13
  2. [JSP] Affichage numéro de ligne d'une exception
    Par PhoneKilleR dans le forum Servlets/JSP
    Réponses: 12
    Dernier message: 23/09/2003, 14h59
  3. Réponses: 2
    Dernier message: 28/08/2003, 00h00
  4. Réponses: 3
    Dernier message: 01/11/2002, 14h30

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