Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1728 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [java]comment compter les cases identique d'un tableau ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[java]comment compter les cases identique d'un tableau ?

n°2266632
saebalyon
le roi de l'aurtogafe
Posté le 28-09-2015 à 20:28:32  profilanswer
 

bonsoir,
 
je seche totalement sur mon probleme.
 
je cherche a réaliser une analyse d'un tableau contenant des adresse par rue.
 
le tableau contient des adresses , du type Mr truc, 23 rue de la gare , ou mme michu, 18b avenue de la place.
 
avec un indexOf il n'y a pas de probleme je récupère les rue que je veux
 
je peut même réaliser une liste de toutes les rue ou avenue.
 
Mais je voudrais que ca donne :
 
rue de la gare : 23 logements
avenue de la place : 11 logements
place jean jaures : 5 logements
 
avez vous des idée simple pour le faire sans passer par des map ou autre truc complexe ?
 
Merci


---------------
L'urbex : faire découvrir le patrimoine oublié / Mon album urbex : https://www.flickr.com/photos/14695 [...] 5272741566
mood
Publicité
Posté le 28-09-2015 à 20:28:32  profilanswer
 

n°2266633
saebalyon
le roi de l'aurtogafe
Posté le 28-09-2015 à 21:39:30  profilanswer
 

le debut du code
 
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package boitem;
 
import java.util.Arrays;
 
/**
 *
 * @author CityHunter
 */
public class Boitem {
static String[] fourniseur;
static String resultat;
static String recherche;
static String[] tableau1;
static int compteur;
static int nbClient;
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
                String[] tableau1;
                tableau1=new String[10] ;  
                tableau1[0]="14, rue des tilleules";
                tableau1[1]="11, avenue de la gare";
                tableau1[2]="59, avenue de la gare";
                tableau1[3]="9, rue des tilleules";
                tableau1[4]="9, rue des tilleules";
                tableau1[5]="2,rue de la gare";
                tableau1[6]="21, place jean jaures";
                tableau1[7]="8, place jean jaures";
                tableau1[8]="1, place jean jaures";
                tableau1[9]="5, rue des tilleules";
         
 
                 
        //*crée un tableau fournisseur contenant que les fourniseurs
 
                String[] adresses;
                adresses= new String[10];
                 
                    for(int i=0;i<tableau1.length;i++)
                        {  
 
               //le tableau nomfourniseur en entier est remplie avec la recherche (substring) en entier de tableau1 [i] en ne prenant que les@xxxx (indexOf)//
                     
               adresses[i]=tableau1[i].substring(tableau1[i].indexOf("," )+1);
                 
               
                        }
                   
               String resultat[];  
               String recherche;
               for(int i=0;i<adresses.length-2;i++)
               {
                   for(int j=i+1;j<adresses.length-1;j++)
                   {
                        if (adresses[i].compareTo(adresses[j])==1)
                        {
                            recherche=adresses[i];
                            adresses[i]=adresses[j];
                            adresses[j]=recherche;  
                 
                compteur++;
                        }
                        else
                        {
                        nbClient=compteur++;
                        }
                   }    
               }    
       System.out.println("le adresses des clients" );        
      System.out.println(Arrays.toString(adresses));        
                     
                     
                             
                   }
}


---------------
L'urbex : faire découvrir le patrimoine oublié / Mon album urbex : https://www.flickr.com/photos/14695 [...] 5272741566
n°2266651
Farian
Posté le 29-09-2015 à 09:24:18  profilanswer
 

Bonjour !
 
Je ne suis pas d'accord avec vous sur la complexité d'utilisation d'une map, qui présente en plus l'avantage de ne parcourir qu'une seule fois la liste de toutes les adresses. Vous n'aurez besoin que de peu de fonctionnalités de ce conteneur dans votre cas.
 
Cela me paraît être le conteneur le plus adapté, avec un algorithme simple. Ssi vous voulez faire autrement, en n'utilisant que des tableaux, vous allez vous rendre compte que l'algorithme se complique assez vite, et que le temps de parcours n'est plus linéaire et augmente très vite lui aussi !
 
J'ai bien conscience de répondre (largement) à côté de votre réponse, mais je ne suis pas certain qu'il soit possible de trouver une réponse simple sans utiliser un conteneur qui est, selon moi, très adapté, voire le plus adapté à la résolution du problème.
 
Bonne continuation !

n°2266678
gilou
Modérateur
Modzilla
Posté le 29-09-2015 à 15:27:45  profilanswer
 

Oui, une map (que j'appelle en perl un hash), c'est la structure naturelle pour ce genre de décompte.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2266716
caps lock
Posté le 29-09-2015 à 21:04:41  profilanswer
 

Code :
  1. package boitem;
  2. import java.util.ArrayList;
  3. import java.util.Collections;
  4. import java.util.HashSet;
  5. import java.util.List;
  6. import java.util.Set;
  7. public class Boitem {
  8.    public static void main(String[] args) {
  9.       String[] tab;
  10.       tab = new String[10];
  11.       tab[0] = "14, rue des tilleules";
  12.       tab[1] = "11, avenue de la gare";
  13.       tab[2] = "59, avenue de la gare";
  14.       tab[3] = "9, rue des tilleules";
  15.       tab[4] = "9, rue des tilleules";
  16.       tab[5] = "2,rue de la gare";
  17.       tab[6] = "21, place jean jaures";
  18.       tab[7] = "8, place jean jaures";
  19.       tab[8] = "1, place jean jaures";
  20.       tab[9] = "5, rue des tilleules";
  21.       List<String> liste = new ArrayList<>();
  22.       for (String s : tab) {
  23.          String[] adresse = s.split("\\s*,\\s*" );
  24.          liste.add(adresse[1]);
  25.       }
  26.       Set<String> unique = new HashSet<>(liste);
  27.       for (String cle : unique) {
  28.          System.out.println(cle + ": " + Collections.frequency(liste, cle));
  29.       }
  30.    }
  31. }


OUTPUT :
avenue de la gare: 2
rue de la gare: 1
rue des tilleules: 4
place jean jaures: 3

n°2266746
LeRiton
Posté le 30-09-2015 à 08:45:38  profilanswer
 

One liner Java 8 avec Collectors.groupingBy() :
 

Code :
  1. List<String> addresses = Arrays.asList(
  2.    "14, rue des tilleules", "11, avenue de la gare", "59, avenue de la gare", "9, rue des tilleules",
  3.    "9, rue des tilleules", "2,rue de la gare", "21, place jean jaures", "8, place jean jaures",
  4.    "1, place jean jaures", "5, rue des tilleules" );
  5.  
  6. Map<String, Long> occurrences = addresses.stream().collect(
  7.    Collectors.groupingBy(address -> address.split("," )[1], Collectors.counting()));
  8.  
  9. occurrences.forEach((street, count) -> System.out.println(street + ": " + count));


 
C'est quand même moins moche que les tableaux et foreach.

n°2267012
saebalyon
le roi de l'aurtogafe
Posté le 04-10-2015 à 22:19:03  profilanswer
 

bonsoir , désoler j'etait tres oqp ces jours ci je vous remerci pour la solution, qui a débloquer mon probleme :)
 
effectivement passer par une liste est tres simple, je n'y avais pas penser :) merci a tous :)


Message édité par saebalyon le 04-10-2015 à 22:19:31

---------------
L'urbex : faire découvrir le patrimoine oublié / Mon album urbex : https://www.flickr.com/photos/14695 [...] 5272741566
n°2267099
Profil sup​primé
Posté le 06-10-2015 à 13:27:47  answer
 

Bonjour,
Je connais pas java comme on entend connaître un langage, mais j'y ai touché, j'en connais un poil pour dire que :
Si non, en pseudo-langage :
 
je reformule ainsi, contruire une liste de compteur d'occurence.
 
Donc on devrait avoir un type : ou une structure, une classe, avec : une occurence et un compteure.
 
Et contruire la liste en parcourant le tableau.
  si l'occurence n'existe pas, on l'ajoute on initialise à 1 le compteur,
 si non on incrémente le compteur de l'occurence.
fin loop.

n°2267107
gilou
Modérateur
Modzilla
Posté le 06-10-2015 à 14:00:12  profilanswer
 

> Et contruire la liste en parcourant le tableau.  
 
C'est pour ça qu'on a dit d'utiliser un tableau associatif: pour éviter de parcourir la liste à chaque fois pour tester si l’occurrence existe dans la liste.
 
A+,


Message édité par gilou le 06-10-2015 à 14:01:26

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2267113
Profil sup​primé
Posté le 06-10-2015 à 14:19:54  answer
 

Bonjour Gilou.
 
Tu pourais, m'expliquer l'astuce là, parce que si j'évite de parcourir un gestionnaire de donné pour savoir si une donnée existe dans le gestionnaire, je me passrais de l'option O2 de gcc. Ou autre. C'est quoi un tableau associatif ? Merci.
 
(A moins de trier, indexer, sommer les index, trier les index)

mood
Publicité
Posté le 06-10-2015 à 14:19:54  profilanswer
 

n°2267123
Profil sup​primé
Posté le 06-10-2015 à 14:26:48  answer
 

Si non en réccurcif, vous procèderiez comment.
C'est pas une idée ?

n°2267230
gilou
Modérateur
Modzilla
Posté le 07-10-2015 à 14:13:09  profilanswer
 

Un tableau associatif, ou hash, ou dictionnaire, c'est un tableau donc chaque élément est un couple (clé, donnée) la clé ayant une valeur unique et sert de valeur d'index pour accéder à la valeur associée.
Dans ce cas précis, tu utilises comme clé la ligne elle même, et comme donnée un compteur.
Quand tu lis une ligne, tu cherche la valeur du tableau associatif avec pour clé cette ligne.
Soit il y en a pas, et tu en crées une avec pour valeur de compteur 1,  
Soit il y en a, et tu incrémentes la valeur du compteur de 1
 
Plein de langages supportent directement ou avec un module standard cette structure de donnée basique (Perl Python C++ etc)
 
A+,


Message édité par gilou le 07-10-2015 à 14:13:52

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2267257
Profil sup​primé
Posté le 07-10-2015 à 18:38:06  answer
 


Ah woais, les tables de hashage j'appelle ça.
J'ai raté le cours peut être ou comme j'ai jamais jeter un oeuil à la structure j'y pensais pas.
 
Et donc là, ce serait adapté \;
 
Kool!
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [java]comment compter les cases identique d'un tableau ?

 

Sujets relatifs
Java map vers Javascript map ?[EXCEL] passer d'un tableau croisé à des lignes à plat
[C++11] fonction renvoyant une reference sur un tableau de 10 stringRecherche développeur FullStack Java/AngularJs
propriétés des objets java (en nombre de bits )progamme java
java virtual machine dans une fenêtre tkinterrécupération données tableau html avec python
Petit problème JavaMacro copier tableau avec plusieurs critères
Plus de sujets relatifs à : [java]comment compter les cases identique d'un tableau ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR