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

Collection et Stream Java Discussion :

Trier un tableau cas croissant seul marche


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Par défaut Trier un tableau cas croissant seul marche
    bonsoir
    en triant mon tableau le cas croissant seulement marche
    en cas décroissant il marche pas,en plus il change l'ordre de saisie en croissant.

    mon output est:
    Entrez le nb d'élément:
    3
    Saissisez les nombres:1
    7
    Saissisez les nombres:2
    8
    Saissisez les nombres:3
    9
    [7, 8, 9]
    tableau est: true
    ----------------------------
    Entrez le nb d'élément:
    3
    Saissisez les nombres:1
    7
    Saissisez les nombres:2
    5
    Saissisez les nombres:3
    2
    [5, 7, 2]
    tableau est: true

    je veux, qu'il garde en ordre de saisie comme le 1er cas, mais celui ci le change et s'affiche 5,7,2 au lieu de 7,5,2
    et afficher false en cas de décroissant , aidez moi svp


    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
     
    import java.util.Scanner;
    import java.util.Arrays;
    public class Test2 
    {	
         public static void main(String[] args) 
         {
         Scanner sc=new Scanner(System.in);
         System.out.println("Entrez le nb d'élément:");
         int n=sc.nextInt();
         int tab[]=new int [n];
         boolean croissant=true;
         for(int i=0;i<n;i++)
    	 {
    	  System.out.println("Saissisez les nombres:"+(i+1));
    	  tab[i]=sc.nextInt();
    	 }
    	 TriTableauCroissant(tab,n,croissant); 
        }
     
    	public static int[] TriTableauCroissant(int[] tab, int n, boolean croissant)
    	{
    		int i, pos,temp;
    		for( i=0;i<n-2;i++)
    		{
    			pos=i;
    			for(int j=i+1;j<n-1;j++)
    			{
    				if(croissant)
    				{
    					if(tab[j]<tab[pos])
    					{
    						pos=j;
    					}
    					else
    					{
    						if(tab[j]>tab[pos])
    						{
    							 pos=i;
    						}
    					}
    				}
    				temp=tab[pos];
    				tab[pos]=tab[i];
    				tab[i]=temp;
    			}
    		}
    		System.out.println(Arrays.toString(tab));
    		System.out.println("tableau est: "+croissant);
    		return tab;		
    	}
    }

  2. #2
    Membre Expert
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Par défaut
    Dans l'ordre croissant, tu peux faire ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Collections.sort(Arrays.asList(tab));
    Dans l'ordre décroissant, tu peux faire ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Collections.sort(Arrays.asList(tab), Collections.reverseOrder());

    Sauf si le but de l'exercice est de coder soi-même un tri


    Pour le fait de faire afficher false (pour décroissant), il faudrait que ton boolean croissant puisse changer : pour l'instant il vaut toujours true.

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Par défaut
    en l'executant j'ai erreur message suivant:
    Exception in thread "main" java.lang.Error: Unresolved compilation problem:
    The method sort(List<T>, Comparator<? super T>) in the type Collections is not applicable for the arguments (int[], Comparator<Object>)

    at Test2.main(Test2.java:21)

    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
     
    import java.util.Collections;
    import java.util.Scanner;
    import java.util.Arrays;
    public class Test2 
    {
    			 public static void main(String[] args) 
    			 {
    			   Scanner sc=new Scanner(System.in);
    			   System.out.println("Entrez le nb d'élément:");
    			   int n=sc.nextInt();
    			   int tab[]=new int [n];
    			   //boolean croissant=true;
    			  boolean decroissant=true;
    			   for(int i=0;i<n;i++)
    			   {
    			     System.out.println("Saissisez les nombres:"+(i+1));
    			     tab[i]=sc.nextInt();
    			   }
    			   //TriTableauCroissant(tab,n,croissant);  
    			   TriTableauDecroissant(tab,n,decroissant);
    			   Collections.sort(tab,Collections.reverseOrder());
    			 }
     
    	private static void TriTableauDecroissant(int[] tab, int n,boolean decroissant) 
    	{
    		int i, pos,temp;
    		//decroissant=false;
    		for( i=0;i<n-2;i++)
    		{
    			pos=i;
    			for(int j=i+1;j<n-1;j++)
    			{
    				if(decroissant)
    				{
    					if(tab[j]<tab[pos])
    					{
    						pos=j;
    					}
    					else
    					{
    						if(tab[j]>tab[pos])
    						{
    							pos=j;
    						}
    					}
    				}
    				System.out.println("tableau est decroissant : "+decroissant);
    				temp=tab[pos];
    				tab[pos]=tab[i];
    				tab[i]=temp;		
    			}
    		}
    		System.out.println(Arrays.toString(tab));
    		return  ;	
    	}	
    }
    merci pour vos aides

  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,

    C'est normal que tu obtiennes cette erreur avec Collections.sort(tab,Collections.reverseOrder()); : ça ne fonctionne que sur des List, pas des tableaux (et tab est un tableau dans ton code). De toute manière, ça ne fonctionnerait pas avec le Comparator qui ne peut comparer que des types classes, pas primitif (comme int). Et Arrays.asList() ne t'aidera pas, parce que ça va donner une List de int[], pas une liste de Integer.

    Le problème dans ton algorithme (puisque c'est le but de l'exercice, c'est-à-dire implémenter soi-même un algorithme de tri), c'est que tu ne peux pas simplement inverser la condition de comparaison en fonction du type de tri (croissant ou décroissant) : il faut également inverser le parcourt du tableau, parce que le principe d'un tel tri est de repousser la valeur la plus petite, ou la plus grande selon, petit à petit (par inversion successive), vers sa position finale, qu'on ne touche plus lors de l'itération suivante.
    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
    Membre très actif
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Par défaut
    ok merci beaucoup

Discussions similaires

  1. Réponses: 7
    Dernier message: 21/01/2012, 14h08
  2. trier un tableau par odre croissant
    Par bakman dans le forum VB.NET
    Réponses: 6
    Dernier message: 13/05/2011, 22h40
  3. Réponses: 9
    Dernier message: 12/05/2009, 19h38
  4. Trier un tableau par ordre croissant
    Par Halleck dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 01/11/2004, 00h04
  5. trier un tableau et compter des elements du tableau
    Par remi51 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 17/06/2002, 16h51

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