[JAVA] Compter nombre de fois caractère dans un tableau

Compter nombre de fois caractère dans un tableau [JAVA] - Java - Programmation

Marsh Posté le 17-10-2012 à 16:45:15    

Bonjour,

 

Je dispose d'un tableau contenant des string de ce type :

 

"0,3"
"2,4"
"1,8"
"7,4"
"0,2"
"1,9"
"9,0"

 

Je voudrais compter le nombre de fois que revient chaque nombre avant ou après la virgule

 

Donc dans notre exemple il y a 3x le nombre 0 , 2x le nombre 1 ...

 

Et je voudrais récupérer combien de fois revient chaque nombre.
Pour stocker chaque nombre dans un tableau  :

 

0 / 1 / 2 / 3 / ... / n               <----- Numero case tableau
3 / 2 / 2 / 1 / ... / n              < ----- Nombre de fois que revient le nombre correspondant au numéro de la case du tableau

 

La méthode nous retourne donc un tableau de int ( int [] )
Pensez-vous que cela soit possible et si oui je veux bien une piste de solution ?

 

Merci d'avance de votre aide.


Message édité par justbam le 17-10-2012 à 16:47:08

---------------
▼ [ACH/VDS] ▼
Reply

Marsh Posté le 17-10-2012 à 16:45:15   

Reply

Marsh Posté le 17-10-2012 à 17:28:44    

J'ai pas la solution mais un conseil, prévoit un test avec 9,9 par exemple


---------------
www.pronovolley.fr Faites vos prono sur la ligue de Volley et défiez vos amis. Des cadeaux en fin d'année  www.levoll.fr
Reply

Marsh Posté le 18-10-2012 à 14:44:31    

On peut discuter si il vaut mieux mettre des Tokenizer ou des startsWith ou des endsWith ...
J'ai essayé de raccourcir les boucles avec found1 found 2...
Tout cela est optimisable...
 

Code :
  1. public class CompteurOccurenceApp {
  2. static String[] tableau = { "0,3", "2,4", "1,8", "7,4", "0,2", "1,9", "9,0", "9,9" };
  3. /**
  4.  * @param args
  5.  */
  6. public static void main(String[] args) {
  7.  int longueur = tableau.length;
  8.  String chaine;
  9.  boolean found1, found2;
  10.  //contiend les résultats de 0 à 9
  11.  int[] resultat = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; 
  12.  for ( int i =0; i< longueur; i++ ){
  13.   chaine = tableau[i];
  14.   found1 = found2 = false;
  15.   System.out.println(chaine);
  16.   for (int j =0; j < 10; j++){
  17.    if ( chaine.startsWith(j+"," ) ){
  18.     resultat[j]++;
  19.     System.out.println(j + " détecté en début" );
  20.     found1=true;
  21.    }
  22.    if ( chaine.endsWith(","+j) ){
  23.     resultat[j]++;
  24.     System.out.println(j + " détecté en fin" );
  25.     found2=true;
  26.    }
  27.    if ( found1 && found2 ){
  28.     System.out.println(j+" : debut et fin détecté, break" );
  29.     break;
  30.    }
  31.   }
  32.  }
  33.  System.out.println("--- Résultat ---" );
  34.  for (int j =0; j < 10; j++){
  35.    System.out.println(j + " apparait " + resultat[j] + " fois" );
  36.  }
  37. }
  38. }


Message édité par willy le kid le 18-10-2012 à 14:47:13
Reply

Marsh Posté le 18-10-2012 à 15:41:00    

merci de la réponse c'est plus ou moins ce que j'ai utilisé cela me conforte dans mon choix.
 
Il faut également que j'optimise un peu tout cela et ce sera parfait.
 
Merci bien de ta réponse ;)


---------------
▼ [ACH/VDS] ▼
Reply

Marsh Posté le 23-10-2012 à 17:06:50    

Pour décoder le contenu, String.split(String) est très utile
 
"0,3".split("," ) retourne un tableau contenant {"0" , "3" )
"0,3".split("," )[0] = 0
"0,3".split("," )[1] = 3
 
Ensuite, pour stocker les occurrences, la structure la plus adaptée est clairement la HashMap.
En clé, tu mets le nombre pour lequel tu comptes les occurrences et en valeur, tu mets le nombre d'occurrences.
 
Voici un exemple vite fait:
 

Code :
  1. public static void main(String[] args) {
  2.  String[] tableau = { "0,3", "2,4", "1,8", "7,4", "0,2", "1,9", "9,0", "9,9" };
  3.  // HashMap pour stocker les occurences
  4.  HashMap<Integer, Integer> occ = new HashMap<Integer, Integer>();
  5.  for (String s : tableau) {
  6.   // Conversion en entier...
  7.   int x = Integer.valueOf(s.split("," )[0]);
  8.   int y = Integer.valueOf(s.split("," )[1]);
  9.   // Si la valeur x n'y est pas, on la met avec un compteur à 0
  10.   if (occ.get(x) == null) {
  11.    occ.put(x, 0);
  12.   }
  13.   // Puis on incrémente
  14.   occ.put(x, occ.get(x) + 1);
  15.   // Si la valeur y n'y est pas, on la met avec un compteur à 0
  16.   if (occ.get(y) == null) {
  17.    occ.put(y, 0);
  18.   }
  19.   // Puis on incrémente
  20.   occ.put(y, occ.get(y) + 1);
  21.  }
  22.  for(Entry<Integer,Integer> entry:occ.entrySet()){
  23.   System.out.println(entry.getKey()+" est présent "+entry.getValue()+" fois" );
  24.  }
  25. }

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed