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

avec Java Discussion :

Problème sur une acquisition


Sujet :

avec Java

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 77
    Points : 49
    Points
    49
    Par défaut Problème sur une acquisition
    Bonjour ~

    J'ai un probleme sur une méthode. J'ai une entreprise à laquelle je dois ajouter une autre entreprise (acquisition ) qui range ensuite les éléments de cette nouvelle entreprise dans l'ordre croissant de salaires, et ensuite par ordre alphabétique.
    J'utilise pour ca des listes chainées sans utiliser les linkedlist mais rien à faire! je n'arrive pas a ajouter les éléments à la premiere entreprise..
    Voici le code :
    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    class Entreprise {
       Cellule petitSalaire;
       Cellule petitNom;
     
       public Entreprise() {
          this.petitSalaire = null;
          this.petitNom = null;
       }
     
       public Entreprise(Employe e) {
          this.petitSalaire = new Cellule(e);
          this.petitNom = new Cellule(e);     
       }
     
       public void ajout(Employe empi) {
    	   Cellule c1 = new Cellule(empi);
    	   if(this.petitSalaire != null) {
    		   if(this.petitSalaire.emp.getSalaire() > c1.emp.getSalaire()) {
    			   c1.suivanteSalaire = this.petitSalaire;
    			   this.petitSalaire = c1;
    		   }
    		   Cellule c;
    		   for(c = this.petitSalaire; c != null; c = c.suivanteSalaire) {
    			   if(c.emp.getSalaire() < c1.emp.getSalaire() && c.suivanteSalaire == null) {
    				   c.suivanteSalaire = c1;
    			   }
    			   if(c.emp.getSalaire() < c1.emp.getSalaire() && c.suivanteSalaire.emp.getSalaire() > c1.emp.getSalaire()) {
    				   c1.suivanteSalaire = c.suivanteSalaire;
    				   c.suivanteSalaire = c1;
    			   }
    		   }
    	   }
    	   else this.petitSalaire = c1;
       }
     
       public void ajoutNomSalaire(Employe empi) {
       	Cellule a = this.petitNom;
       	Cellule c = new Cellule(empi);
       	this.ajout(c.emp);
       	if(this.petitNom == null) {
       		this.petitNom = c;
       	}
       	else {
       		while(a != null) {
        		if(a.suivanteNom == null) {
       			a.suivanteNom = c;
       			break;
    		}
       			if(c.emp.getNom().compareTo(a.emp.getNom()) > 0 && c.emp.getNom().compareTo(a.suivanteNom.emp.getNom()) < 0) {
       				c.suivanteNom = a.suivanteNom;
       				a.suivanteNom = c;
       				break;
       			}
       		a = a.suivanteNom;
       		}
       	}
       }
     
       	public void acquisition(Entreprise e) {
          		for(Cellule c = e.petitSalaire; c != null; c = c.suivanteSalaire) {
              		this.ajoutNomSalaire(e.petitSalaire.emp);
          		}
     
          	}
    classe cellule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class Cellule {
       Employe emp;
       Cellule suivanteNom;
       Cellule suivanteSalaire;
     
       public Cellule(Employe e) {
          this.emp = e;
          this.suivanteNom = null;
          this.suivanteSalaire = null;
       }
    }
    j'ai simplement mis les méthodes liées au probleme (sachant que toutes les autres fonctionnent a part ce fichu acquisition).

    Voila merci de votre eventuelle aide

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Je regarde la première méthode d'ajout et je vois déjà des cas qui ne sont pas pris en compte. Ca viens du fait que tu essaie de jouer avec la cellule et la suivante en même temps, avec plus ou moins de succès. Par exemple, tu ne traite pas les cas d'égalité :s Ce qui est embêtant car en cas de salaires égaux... Pas d'insertion .

    l'algorithme devrait être celui-ci, pour une insertion dans une liste chainée:
    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
     
    aInserer = ...
    previous = null
    current = this.start;
    do{
        if (current = null || aInserer <= current){ //fin de liste ou point d'insertion
            if (previous==null){ // tête de liste
                this.start=aInserer
            } else
                 previous.next = aInserer
            aInserer.next = current;
            break;
        }
        previous = current;
        current = current.next;
    } while (true)
    Tu notera que je ne traite qu'à un seul endroit l'insertion du coup, ce qui est plus clair. L'insertion aura toujours lieu puisqu'il est impossible de quitter la boucle sans faire l'insertion. Après j'ignoire pourquoi tu joue avec deux liste plutot que de mettre le nom dans la Cellule. Je n'ai pas regardé la méthode ajoutNom

  3. #3
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Bonjour,

    Tu devrais utiliser une liste (Chainé ou non) appartenant à ton entreprise.
    Et réaliser un comparateur d'Employe correspondant à tes critères de trie.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class EmployerComparator implements Comparator<Employer> {
    		@Override
    		public int compare(Employer a, Employer b) {
    			if(a.getSalaire() >b.getSalaire()){
    				return -1;
     
    			}else if(a.getSalaire() == b.getSalaire()){
    				// TODO rajouter des règle de comparaison 
    				return 0;
    			}else {
    				return 1;
    			}
    		}
    	}
    Et en triant la liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	public LinkedList<Employer> list = new LinkedList<Employer>();
    	public static void main(String[] args) {
    		Entreprise test = new Entreprise ();
    		Entreprise.list.addLast(new Employer());
    		Collections.sort(test.list, new EmployerComparator());
    	}
    Cordialement,
    Patrick Kolodziejczyk.

    Source :
    http://docs.oracle.com/javase/7/docs...inkedList.html
    http://docs.oracle.com/javase/7/docs...omparator.html
    http://docs.oracle.com/javase/7/docs...llections.html
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2013
    Messages : 77
    Points : 49
    Points
    49
    Par défaut
    Ok merci de vos réponses qui m'ont permis de bien comprendre

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

Discussions similaires

  1. [Optimisation] Problème sur une requête UNION.
    Par françois62 dans le forum Requêtes
    Réponses: 5
    Dernier message: 28/06/2005, 16h08
  2. Débutant SQL, problème sur une jointure censée exclure ??
    Par derfatypik dans le forum Langage SQL
    Réponses: 8
    Dernier message: 22/06/2005, 15h55
  3. Problème sur une expression régulière
    Par Verbal-Quint dans le forum Langage
    Réponses: 6
    Dernier message: 12/11/2004, 10h54
  4. Problème sur une requête INSERT
    Par Marion dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/06/2003, 08h45
  5. problème sur une requête!!!!!
    Par Mcgrady_01 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/06/2003, 01h17

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