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

Java Discussion :

Faire un tri parmi les attributs d'un objet


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ecole d'ingénieur
    Inscrit en
    Avril 2014
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ecole d'ingénieur

    Informations forums :
    Inscription : Avril 2014
    Messages : 80
    Par défaut Faire un tri parmi les attributs d'un objet
    Bonjour à tous, je fais actuellement un programme qui permet de créer des machines possédant certains attributs (Nom, ID, ID de l'atelier, marque etc...)

    Et je suis sensé faire une méthode qui me permettrai de pouvoir savoir combien de machine ont été créées dans chaque atelier.

    Et je vous avoues que je suis un peu perdu car j'ai tenté 100 trucs différents et je m'en sors pas...

    J'ai essayé d'abord de faire un double test du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if( this.getIdAtelier() == idAtelier && this.getNomMachine() != nomMachine)
    		{
    			temp++;
    		}
    		else
    		{
    			temp=1;
    		}
    Puis me rendant compte que ça ne pouvais marcher car j'écrasais tout le temps la valeur temp ce qui donc tronquais mon résultat j'ai essayé via un tableau comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	int [] saveId = new int[50];
    		temp = nbMachine-1;
    		for (i=temp; i < nbMachine; i++)
    		{
    			saveId[i] = getIdAtelier();
    		}
    Sachant que la variable nbMachine est le nombre de machines totales créées. J'ai donc bien sauvegardé mes id comme je le veux dans mon tableau (pb, je ne peux pas avoir plus de 50 machines) mais je ne sais pas faire le tris sur mon tableau. Ce que je voudrai est de, suivant le nombre de redondance d'un certain ID, incrémenter x fois une variable afin de la display par la suite ( ex: si j'ai 3 ID =5 dans mon tableau, alors j'ai une variable x=3 ).

    Merci d'avance =D

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 096
    Par défaut
    Juste une petite remarque sur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.getNomMachine() != nomMachine
    Si nomMachine est un String, il faut savoir qu'on en compare des string qu'avec la méthode equals() et non avec == ou !=
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Homme Profil pro
    Ecole d'ingénieur
    Inscrit en
    Avril 2014
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ecole d'ingénieur

    Informations forums :
    Inscription : Avril 2014
    Messages : 80
    Par défaut
    Ah ouais t'as complètement raison j'avais même pas fais gaffe ! Ça ne me résous pas mon problème mais au moins j'y penserai la prochaine fois ! Merci !

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Je ne suis pas sûr d'avoir tout compris à ce que tu cherches à faire. Tu cherches à compter le nombre d’occurrences d'éléments pour chaque valeur d'une condition donnée sur tes attributs.

    Autrement dit, ce qu'on pourrait avoir avec un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    List<Machine> list = new ArrayList<Machine>();
     
    Map<Atelier,Long> counters =  list.stream().collect(
         Collectors.groupingBy(Machine::getAtelier, 
         Collectors.counting())
    );
    Avec une classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class Machine {
     
         public Atelier getAtelier() {
         }
     
    }
    (bien sûr, si au lieu de Atelier getAtelier() tu as String getAtelierId(), c'est le même principe, pour obtenir une Map<String, Long>)

    Ceci en Java 8. En Java 7, il faut écrire soit même le code qui effectue le remplissage de la map, sous le principe :

    Code pseudocode : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    pour l'ensemble des machines
       je regarde si la map contient déjà un compteur pour l'atelier de cette machine
          si oui : j'incrémente ce compteur
          si non, je mets 1 dans la map associé à cet atelier
       fin test
    
    fin pour
    
    
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 096
    Par défaut
    Ceci n'est peut être pas la meilleur des manières mais cela fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    package dummy;
     
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.Map.Entry;
    import java.util.Random;
    import java.util.Set;
     
    public class main {
     
    	public static void main(String[] args) {
     
    		Random rnd = new Random();
     
    		List<Machine> list_machines = new ArrayList<>();
    		int id = 0;
     
    		for (int i = 0; i < 16; i++) {
    			Machine m = new Machine("Machine", id++, rnd.nextInt(4));
    			list_machines.add(m);
    			System.err.println("Machine crée : "+m);
    		}
     
     
    		// Méthode 1
     
    		// Map atelier, compteur de machines
    		Map<Integer, Integer> map = new HashMap<>();
    		for (Iterator<Machine> iterator = list_machines.iterator(); iterator.hasNext();) {
    			Machine machine = (Machine) iterator.next();
    			int cle = machine.ID_atelier;
    			Integer compteur = map.get(cle);
    			if (compteur==null)
    				map.put(cle, 1);
    			else
    				map.put(cle, compteur+1);
    		}
     
    		// Et la tu as un map avec pour chacune des clé (id atelier), le nombre de machine
    		Set<Entry<Integer, Integer>> set = map.entrySet();
    		for (Iterator iterator = set.iterator(); iterator.hasNext();) {
    			Entry<Integer, Integer> entry = (Entry<Integer, Integer>) iterator.next();
    			System.err.println("Dans atelier "+entry.getKey()+" il y'a "+entry.getValue()+ " machines");
    		}
     
     
    	}
     
    }
    avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    package dummy;
     
    public class Machine {
    	String nom;
    	int ID;
    	int ID_atelier;
     
    	public Machine(String nom, int iD, int iD_atelier) {
    		super();
    		this.nom = nom;
    		ID = iD;
    		ID_atelier = iD_atelier;
    	}
     
            public int getID_atelier() {
    		return ID_atelier;
    	}
     
    	@Override
    	public String toString() {
    		return "Machine [nom=" + nom + ", ID=" + ID + ", ID_atelier="
    				+ ID_atelier + "]";
    	}
     
    }
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 096
    Par défaut
    Sinon la méthode 2 avec java 8 qui prends beaucoup moins de lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // Methode 2 : 
    Map<Integer, Long> map2 = list_machines.stream().collect(Collectors.groupingBy(Machine::getID_atelier, HashMap::new, Collectors.counting()));
     
    map2.entrySet().forEach(entry -> {
    	System.err.println("Dans atelier "+entry.getKey()+" il y'a "+entry.getValue()+ " machines");
    	}
    );
    Edit : Oups j'avais pas vu ta réponse Joel...
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre confirmé
    Homme Profil pro
    Ecole d'ingénieur
    Inscrit en
    Avril 2014
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ecole d'ingénieur

    Informations forums :
    Inscription : Avril 2014
    Messages : 80
    Par défaut
    Désolé de ne pas avoir été clair, ce que je veux faire est plutot simple dans l'idée, j'ai une classe machine avec les attributs suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	public Machine(String nomM, int imM, int iaM, String marqueM, int irM){
     
    		nbMachine++;
    		idMachine = imM;
    		nomMachine = nomM;
    		marqueMachine = marqueM;
    		idAtelier = iaM;	
    		idRespMaintenance =irM;
     
     
    	}
    J'ai un attribut nbMachine que j'incrémente à chaque création afin d'avoir le nombre de machine totale. Le reste est entré par l'utilisateur. Et la question est la suivante :

    *Ajouter dans la classe Machine des variables de classe qui permettent de calculer le nombre des machines créées dans chaque atelier, ainsi que les méthodes permettant de les gérer.

    Je vais lire de ce pas vos réponses car c'était un peu trop fournit pour que je lise ça en 2min (d’où ma réponse en avance de phase).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Faire le tri dans les paquets et dépendances
    Par altair8080 dans le forum Ubuntu
    Réponses: 0
    Dernier message: 16/07/2013, 21h36
  2. Faire un tri sur les mois
    Par emax2k dans le forum Designer
    Réponses: 8
    Dernier message: 21/11/2011, 10h40
  3. Réponses: 3
    Dernier message: 02/07/2010, 15h50
  4. Réponses: 1
    Dernier message: 19/04/2007, 02h37
  5. Réponses: 7
    Dernier message: 13/02/2006, 17h13

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