Accueil > Forum > > > > Exception java.lang erreur
Exception java.lang erreur
vendredi 27 août 2010 à 15:17:22 |
Exception java.lang erreur

orchideor
|
Bonjour tout le monde ,
J'ai une exception java.lang.arrayIndexOutOfBoundsException lors de l'execution de mon programme.
J'ai essayer de modifier la condition selon le nombre d'élements que j'ai dans mon vecteur mais rien n'y fait.
Voilà la partie du code qui est concernée.
Vector week=new Vector();
while (rs.next())
{week.add(rs.getString(2);
}
for (int v=0;v<week.size());v++)
{
if (float.parsefloat(week.elementAt(v).toString()==floatparsefloat(week.elementAt(v+1).toString())
S+=S+Float.parsefloat(week.elementAt(v).toString());
else if (float.parsefloat(week.elementAt(v).toString()!=floatparsefloat(week.elementAt(v+1).toString())
{Sum[j]=S;
j++;
}
}
for(int i=0;i<j;i++)
{System.out.println(+Sum[i]);
Merci pour toute réponse^^.
}
|
|
vendredi 27 août 2010 à 17:51:14 |
Re : Exception java.lang erreur

HFanny
|
Salut,
A priori si la boucle "for" va de 0 à la taille de week.size(), lors du dernier passage dans cette boucle, le week.elementAt(v+1) ne pourra pas exister, d'où l'exception lancée.
Par ailleurs, ya t il une raison particulière pour utiliser un Vector (qui n'est en général plus utilisé maintenant) ?
Fanny
|
|
vendredi 27 août 2010 à 19:26:28 |
Re : Exception java.lang erreur

orchideor
|
Salut,
j'ai utilisé les vecteurs pour stocker des données VARCHAR que j'ai récupéré de la base de donnée.Je dois faire un traitement sur deux colonnes selon la valeur d'une colonne "week".Si c'est le même week, je fais la sommation des valeurs de l'autre colonne.C'est pour ca que je fais la condition if if(Float.parseFloat(week.elementAt(v).toString())==Float.parseFloat(week.elementAt(v+1).toString()))
Je doutais que le dernier indice ne soit pas reconnu,mais je n'ai pas trouver une solution!!
voilà le code tout entier
public static void main(String[] args) {
// TODO Auto-generated method stub
Vector tabLignes=new Vector();
Vector nomCols = new Vector();
Vector week = new Vector();
float Sum[]=new float[100];
int j=0;
{ try { Class.forName ("oracle.jdbc.driver.OracleDriver");
System.out.println("Driver Loaded");
Connection con=DriverManager.getConnection ("jdbc:oracle:thin:@localhost:1521:xe","SYSTEM","infohouda");
System.out.println("Driver Connected");
Statement st=con.createStatement();
//ResultSet rs=st.executeQuery("select * from KPI_NSN");
ResultSet rs=st.executeQuery("select n.TCONG_D,n.WEEK from KPI_NSN1 n order by n.WEEK");
while(rs.next()) {
//System.out.println(rs.getString(1));
nomCols.add(rs.getString(1));
week.add(rs.getString(2));
}
for (int v=0;v<=week.size();v++)
{
System.out.println(nomCols.elementAt(v).toString());
if(Float.parseFloat(week.elementAt(v).toString())==Float.parseFloat(week.elementAt(v+1).toString()))
{
S=S+Float.parseFloat(nomCols.elementAt(v).toString());
System.out.println(Float.parseFloat(nomCols.elementAt(v).toString()));
}
else if(Float.parseFloat(week.elementAt(v).toString())!=Float.parseFloat(week.elementAt(v).toString()))
{Sum[j]=S;
System.out.println(+Sum[j]);
j++;
}
}
for (int i=0;i<j;i++)
{
System.out.println("la somme des num est "+Sum[1]);
}
st.close();
con.close(); }
catch(Exception e) {
System.out.println(e);
} finally {
System.out.println("it's finally block executed");
}
}
}
Encore Merci .
|
|
vendredi 27 août 2010 à 20:37:30 |
Re : Exception java.lang erreur

HFanny
|
Réponse acceptée !
Pourquoi ne pas faire directement la somme dans la requête SQL en utilisant SUM sur TCONG_D avec un group by sur le champ WEEK ?
Si c'est juste pour récupérer la somme, il n'y a pas forcément besoin de passer par une boucle en java si tu ne réutilises pas les données dans la suite du programme.
Sinon, si tu veux garder la requête SQL de cette façon, passer par une Map qui aurait comme clé la semaine (WEEK), et en valeur la somme devrait résoudre ton problème.
En gros ça pourrait donner quelque chose du style:
Code Java :
Map <String, Float> mapWeek = new HashMap<String, Float>();
while(rs.next()) {
String num = rs.getString(1);
String week = rs.getString(2);
Float value = Float.parseFloat(num);
if (mapWeek.containsKey(week)) {
value += mapWeek.get(week());
}
mapWeek.put(week, value);
}
for (Entry<String, Float> e : mapWeek.entrySet()) {
System.out.println(e.getKey() + ": " + e.getValue());
}
Autres choses :
- Il semble que tu n'utilises pas "tabLignes", enlève de ton code tout ce qui est inutilisé, ça encombre le code et ne permet pas une bonne visibilité.
- Tu peux garder ton code précédent (en ajoutant un "if" sur la valeur de v et de la taille du tableau), mais en préférablement en remplaçant Vector par ArrayList (par exemple), l'usage de Vector est de moins en moins répandu.
Fanny
|
|
vendredi 27 août 2010 à 21:06:07 |
Re : Exception java.lang erreur

orchideor
|
Merci Beaucoup Funny,
Je suis débutante c'est pour cela ^^,juste une question pour la partie
if (mapWeek.containsKey(week)) {
value += mapWeek.get(week());
}
mapWeek.put(week, value);
j'ai pas très bien compris le rôle de mapweek!est ce que value représente la somme de TCONG_D selon les week?
Merci encore.
|
|
vendredi 27 août 2010 à 21:24:09 |
Re : Exception java.lang erreur

HFanny
|
Réponse acceptée !
mapWeek est un objet de type "Map" (plus précisément HashMap dans ce cas).
C'est à dire que ça fonctionne par clé/valeur.
Dans la mesure où tu veux condenser les valeurs de n.TCONG_D pour chaque n.WEEK, une Map te permet d'avoir la semaine en tant que clé, et pour chacune de ses clés, d'y attribuer une valeur. La valeur change donc pour chaque itération de ta boucle sur le resultset.
Imagine que tu aies dans ton resultset les valeurs suivantes :
Semaine 1 | 5
Semaine 2 | 4.1
Semaine 1 | 2.2
Semaine 3 | 2.6
Semaine 2 | 3
Le premier passage de la boucle va vérifier si la Map contient déjà la clé "Semaine 1", ce n'est pas le cas, donc on insère dans la Map une nouvelle paire clé/valeur équivalent à clé : "Semaine 1" et valeur : 5
Second passage de la boucle, la clé "Semaine 2" n'existe pas encore dans la Map, donc même chose, on insère une nouvelle paire clé/valeur : "Semaine 2" -> 4.1
Troisième passage, la clé "Semaine 1" existe dans la Map, donc on fait la somme de la valeur du resultset avec 5 (valeur actuelle pour la clé "Semaine 1"), et ensuite même chose, on met à jour la Map avec "Semaine 1" -> 7.2
Et ainsi de suite.
Donc oui, la value représente la somme selon les week.
La méthode .put() d'une Map ajoute la paire clé/valeur si la clé n'existe pas, sinon elle remplace la clé existante.
Fanny
|
|
vendredi 27 août 2010 à 23:04:03 |
Re : Exception java.lang erreur

orchideor
|
J'ai très bien compris la chose, c'est plus facile , il fait le traitement donc seul selon la clé définit!
une dernière chose Fanny , pour la partie
Code Java : for (Entry <String, Float> e : mapWeek.entrySet()) {
System.out.println(e.getKey() + ": " + e.getValue());
}
J'ai cherché un peu sur le net , j'ai trouvé que ça concerne la conversion,en essayant de le faire j'ai eu une erreur :
Entry <String, Float> e : mapWeek.entrySet() type mismatch can not convert from element type Map.entry <String,Float> to indexEvents.entry.
Merci Fanny.
|
|
vendredi 27 août 2010 à 23:13:33 |
Re : Exception java.lang erreur

HFanny
|
Réponse acceptée !
Lorsque tu as ce genre d'erreur, il faut regarder ce que la méthode retourne.
En l'occurence, entrySet() de l'objet Map retourne un objet de type java.util.Map.Entry.
Soit bien sûre que ce soit cet objet que tu aies dans les imports (et non pas un objet Entry d'un autre type):
Code Java : import java.util.Map.Entry;
Fanny
|
|
vendredi 27 août 2010 à 23:25:22 |
Re : Exception java.lang erreur

orchideor
|
Merci Infiniment Fanny pour toute ces Informations ^^.
Le problème est résolu grâce à ton aide.
|
|
vendredi 27 août 2010 à 23:44:45 |
Re : Exception java.lang erreur

HFanny
|
Pas de soucis, n'oublie pas d'accepter une réponse si elle a répondu à ta question (histoire d'y voir plus clair dans la liste des problèmes qui sont posés / résolus).
Fanny
|
|
Cette discussion est classée dans : java, exception, tostring, week, elementat
Répondre à ce message
Livres en rapport
|
Derniers Blogs
GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
J2EEJ2EE par barhoum1111
Cliquez pour lire la suite par barhoum1111
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|