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

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Points : 147
    Points
    147
    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 chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    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 habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 684
    Points : 147
    Points
    147
    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
    Points : 29 131
    Points
    29 131
    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.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 21/01/2012, 15h08
  2. trier un tableau par odre croissant
    Par bakman dans le forum VB.NET
    Réponses: 6
    Dernier message: 13/05/2011, 23h40
  3. Réponses: 9
    Dernier message: 12/05/2009, 20h38
  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, 01h04
  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, 17h51

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