pyrro Posté(e) 12 novembre 2010 Share Posté(e) 12 novembre 2010 Voila je voudrais récupérer mon entier et isoler chacun de ces chiffres pour effectuer des calculs sur chacun de ces chiffres. Comme tous les chiffres seront saisis dans un seul editText, on ma donc suggérer de diviser le nombre par 10 et récupérer la décimale a chaque fois. Mais voila j'ai un petit problème : Quand je prend par exemple l'entier 1234 : 1234/10 = 123.4 Mais si je récupère le décimal comme sa : b = a - (int)a // a étant l'entier diviser par 10 J'obtient b = 0.4000153, or je voudrais juste le chiffre 4 tous seul pour le classer dans un tableau. Ma question est donc comment peut on récupérer uniquement la première décimale d'un nombre ? Je voudrais b = 4 PS : ou alors si quelqu'un connait un moyen plus pratique pour isoler chaque chiffres d'un entier et les classer dans un tableau Un petit schéma pour ceux qui n'aurait pas compris se que je veut faire : Mettre l'entier 12345 dans un tableau genre : int tableauEntier[] = {1,2,3,4,5}; tableau [1][2][3][4][5] Merci d'avance Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kricek Posté(e) 12 novembre 2010 Share Posté(e) 12 novembre 2010 Salut! Je pourrais te conseiller de faire un truc du style: int tonNombre = 123456; //on convertit ton nombre en string String txtNombre = ""+tonNombre; /*On initialise un tableau de string qui contiendra chaque partie découpée*/ String[] decoupe = txtNombre.split(""); /*On instancie un tableau d'int qui comptera autant de cases que de parties découpées*/ int [] tableau = new int[decoupe.length]; /*On initialise une variable i qui ira de 0 jusqu' au nombre de cases en augmentant de 1 à chaque tour.*/ for (int i=0; i<decoupe.length; i++) { \*On récupère la case i du tableau, on la reconvertit en int.*/ int nombreDecoupe = Integer.parseInt(decoupe[i]); /*on la range dans le tableau d'int*/ tableau[i]=nombreDecoupe; } Un truc de ce style... Qu'est ce que tu en penses...? :) Edit: J'ai ajouté les commentaires... Lien vers le commentaire Partager sur d’autres sites More sharing options...
JeP Posté(e) 12 novembre 2010 Share Posté(e) 12 novembre 2010 ... b = a - (int)a // a étant l'entier diviser par 10 ... (int) b*10 ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
pyrro Posté(e) 12 novembre 2010 Auteur Share Posté(e) 12 novembre 2010 Tout d'abord merci pour ces réponse si rapides. Kricek : A quoi correspond le .split a ta 3eme ligne ? Jep : oui mais après je retombe sur un float 4.0, car je suis obliger de mettre b en float pour pouvoir diviser par 10 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kricek Posté(e) 12 novembre 2010 Share Posté(e) 12 novembre 2010 @pyrro: split est une fonction qui sert à découper une string... en gros, on lui dit "tu prends la string et tu coupes dès que tu trouves ce qui est entre parenthèses". et dans ton cas, on met "" comme ça il coupe à chaque caractère. et ça te retourne un tableau de string qui contient chaque partie coupée. après, on prend chaque partie et on la transforme en int. J'espère que ça te conviendra... Lien vers le commentaire Partager sur d’autres sites More sharing options...
JeP Posté(e) 12 novembre 2010 Share Posté(e) 12 novembre 2010 Pas mieux. J'ai un peu zappé le début du post #1 et pas bien compris que tu voulais faire des traitements sur les composantes chiffre de ton nombre. :) Dans ce cas oui, un bon vieux split() et la conversion façon Kricek qu'on doit pouvoir simplifier. Lien vers le commentaire Partager sur d’autres sites More sharing options...
pyrro Posté(e) 12 novembre 2010 Auteur Share Posté(e) 12 novembre 2010 Ok merci je vais essayer sa pour l'instant et sinon a quoi correspond ton s dans : int nombreDecoupe = Integer.parseInt(s); ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
JeP Posté(e) 12 novembre 2010 Share Posté(e) 12 novembre 2010 Ok merci je vais essayer sa pour l'instant et sinon a quoi correspond ton s dans : int nombreDecoupe = Integer.parseInt(s); ? A une erreur fatale ! :D s est decoupe Lien vers le commentaire Partager sur d’autres sites More sharing options...
pyrro Posté(e) 12 novembre 2010 Auteur Share Posté(e) 12 novembre 2010 Donc on retourne i ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
JeP Posté(e) 12 novembre 2010 Share Posté(e) 12 novembre 2010 Non; decoupe[i] pas i tout seul. i est l'indice de parcours de la chaîne découpée (donc la variable decoupe ). Lien vers le commentaire Partager sur d’autres sites More sharing options...
pyrro Posté(e) 12 novembre 2010 Auteur Share Posté(e) 12 novembre 2010 ok je vais essayer sa tout à l'heure merci beaucoup en tout cas Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kricek Posté(e) 12 novembre 2010 Share Posté(e) 12 novembre 2010 oups! désolé, j'étais au cinoche ce soir et j'ai pas suivi la suite... donc pour le "s": La ligne "for (String s : decoupe)", veut dire: "pour chaque string contenue dans decoupe et que l'on va temporairement appeler s"... cela permet de faire un traitement pour chaque morceau découpé. Concernant decoupe: i est un int, une variable qui commence à 0 et qui augmente de 1 à chaque tour. et decoupe veut dire: dans le tableau decoupe, je voudrais ce qui se trouve dans la case i. En espérant avoir éclairci... bien que jep l'ai déjà fait avant moi... Bonne soirée les gars. et tiens nous au courant pyrro... Sent from my GT-I9000 using Tapatalk Lien vers le commentaire Partager sur d’autres sites More sharing options...
JeP Posté(e) 12 novembre 2010 Share Posté(e) 12 novembre 2010 Kricek, tu triches; ton code était for (int i=0; i<decoupe.length; i++) L'embrouille pas plus ;) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kricek Posté(e) 13 novembre 2010 Share Posté(e) 13 novembre 2010 oula... oui, désolé, en fait j'étais parti sur un for (String s:decoupe) mais j'ai fait un for(int i...) lol. Bon, vais prendre un café et j'essayé de revenir après pour expliquer la boucle for... :-) Edit: J'ai ajouté les commentaires dans mon premier post... désolé. Sent from my GT-I9000 using Tapatalk Lien vers le commentaire Partager sur d’autres sites More sharing options...
pyrro Posté(e) 13 novembre 2010 Auteur Share Posté(e) 13 novembre 2010 J'ai essayer ton code mais il me fait une erreur a cette ligne : int nombreDecoupe = Integer.parseInt(decoupe); Est il possible que tu m'explique un peu ton code car j'avoue que [color=red][b]sa[/b][/color] m'embrouille un peu ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kricek Posté(e) 13 novembre 2010 Share Posté(e) 13 novembre 2010 j'ai ajouté les commentaires dans mon premier post. Quelle est l'erreur qu'il te signale? tu peux nous faire un copier coller, stp? La ligne "int nombreDecoupe = Integer.parseInt(decoupe);" regarde dans le tableau decoupe, dans la case n° "i", prend la valeur contenue dans la case et essaye de la transformer en int. si tu as une erreur, ça peut être plusieurs choses... erreur de codage, ou bien ce qui est dans la case n'est pas un nombre, ou bien un "Nullpointer exception" au niveau du nombre de cases, etc... bref, peux tu nous laisser un copier coller de ton logcat, stp? juste les lignes rouges... Sent from my GT-I9000 using Tapatalk Lien vers le commentaire Partager sur d’autres sites More sharing options...
pyrro Posté(e) 13 novembre 2010 Auteur Share Posté(e) 13 novembre 2010 Déjà j'ai oublier de dire que pour l'instant je le fait sous un projet java normal je le porterais a la fin sur android mais cela ne change rien pour le programme. Quand je lance ton code, j'obtiens dans la console java: Exception in thread "main" java.lang.NumberFormatException: For input string: "" at java.lang.NumberFormatException.forInputString(Unknown Source) at java.lang.Integer.parseInt(Unknown Source) at java.lang.Integer.parseInt(Unknown Source) at test.main(test.java:51) la ligne 51 étant celle du fameux decoupe. En revanche quand je remplace i par 1 par exemple cela marche et m'affiche dans la console : 1111111 qui est le nombre de découpe qui est 7 en comptant le "" Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kricek Posté(e) 13 novembre 2010 Share Posté(e) 13 novembre 2010 alors tu as une erreur "numberFormatException". Cette erreur vient du fait qu'à cette ligne, il essaye de convertir en int quelque chose qui n'est pas un nombre... Qu'est ce que tu as entré comme nombre dans ton champs? Pour ta question au sujet de java, pour l'instant, les fonctions utilisées dans le code que je t'ai donné sont bien du java... donc pas de souci de compatibilité... Sent from my GT-I9000 using Tapatalk Lien vers le commentaire Partager sur d’autres sites More sharing options...
JeP Posté(e) 13 novembre 2010 Share Posté(e) 13 novembre 2010 C'est le .split("") qui va t'insérer une chaîne vide en indice 0. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kricek Posté(e) 13 novembre 2010 Share Posté(e) 13 novembre 2010 Pour savoir ce qu'il essaye de convertir, ajoute une ligne dans ton code: System.Out.println("Nombre à convertir : \""+decoupe); mets cette ligne juste après le code"for..." et dis moi le résultat... mais apparemment, il essaye de convertir "" en int... faut voir si ça intervient au début ou à la fin... Sent from my GT-I9000 using Tapatalk Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kricek Posté(e) 13 novembre 2010 Share Posté(e) 13 novembre 2010 Bien vu Jep... Ya des chances en effet... du coup, essaye de modifier ton for en mettant int i=1 à la place de 0... Comme ça, il commencera à la case 1 et non à la case 0... Sent from my GT-I9000 using Tapatalk Lien vers le commentaire Partager sur d’autres sites More sharing options...
JeP Posté(e) 13 novembre 2010 Share Posté(e) 13 novembre 2010 Vue que split() attend une expression régulière, si celle-ci est "vide", il faut quand même mettre les marqueurs de début et de fin : .split("//") par exemple. Lien vers le commentaire Partager sur d’autres sites More sharing options...
pyrro Posté(e) 13 novembre 2010 Auteur Share Posté(e) 13 novembre 2010 Bien vu j'obtiens : Nombre à convertir : "1 Nombre à convertir : "2 Nombre à convertir : "3 Nombre à convertir : "4 Nombre à convertir : "5 Nombre à convertir : "6 il essaye de convertir "1 au lieu de 1 etc... Lien vers le commentaire Partager sur d’autres sites More sharing options...
pyrro Posté(e) 13 novembre 2010 Auteur Share Posté(e) 13 novembre 2010 La fonction split ne peut pas être utilisée directement sur un entier ? Un truk du genre : int a; a=1234; tab[] decoupe = a.split(); Lien vers le commentaire Partager sur d’autres sites More sharing options...
JeP Posté(e) 13 novembre 2010 Share Posté(e) 13 novembre 2010 Ah non, c'est une fonction de la classe String :) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.