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 :

Construction des Comparator multiples


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 18
    Points : 17
    Points
    17
    Par défaut Construction des Comparator multiples
    Bonsoir;

    Comme exercice je voulais créer un tableau d'articles puis le trier selon plusieurs critères pour finir avec l'enregistrement dans un fichier.

    Donc j'ai opté pour l'utilisation des ArryList. Dans ce qui suit un aperçu sur le code de mon prog.


    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
     
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.RandomAccessFile;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Comparator;
     
     
    public class Bin1 {
     
    	//Classe privée "article"
    	private static class article{
    		private int code;
    		private String nom;
    		private double prix;
    		private int stact;
    		private int stmin;
     
     
    	}//End classe privée "article"
     
    	 java.util.Comparator comparecode =
    		new java.util.Comparator(){
    		public int compare (Object o1, Object o2){
    			return comparecdx(o1, o2);
    			}
    		};
     
    	public int comparecdx(Object o1, Object o2){
    		article a1=(article) o1;
    		article a2=(article) o2;		
    		if(a1.code> a2.code)
    			return 1;
    		else if(a1.code<a2.code)
    			return -1;
    		else return 0;
    	}//End Comparator by code
     
     
    	public static void main(String[] args) {
     
    		RandomAccessFile fic=null;
    		ArrayList<article> MyArr= new ArrayList<article>();
    		BufferedReader buff= new BufferedReader(new InputStreamReader(System.in));
    		String cha=null;
    		boolean ends=false;
    		try{
    			fic= new RandomAccessFile("Data.txt", "rw");
    			System.out.println("Creation/opening File with success");
    			fic.close();
    		}catch(IOException e){
    			System.err.println("Failure: creating binary file");
    			System.exit(1);
    		}//End Try/Catch
     
    	//Creation des Articles
    		while(!ends){
    			System.out.print("Add article (y/n)");
    			article art = new article();
    			try{
    				cha=buff.readLine();
    				if(cha.equals("y")){
    					try{
    						//un traitement là
    						MyArr.add(art);
    						Arrays.sort(MyArr, comparecode);
    					}catch(Exception e){
    						System.err.println("Seising Informations failure");
    					}
    				}//End If				
    				else if (cha.equals("n"))
    					ends=true;
    			}catch(Exception e){
    				System.err.println("Reading Error"+e.getMessage());
    				System.exit(2);
    			}//End Try/Catch
    		}//End While_Ends
     
    		System.out.println("Number of Articles: "+MyArr.size());
    	}//Fonction Main
    }//End Classe Principale
    au niveau de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Arrays.sort(MyArr, comparecode);
    j'ai une erreur Cannot make a static reference to the non-static field comparecode
    Donc si j'essaie de rendre static "comparecode" j'aurais une incompatibilité dans la définition de la fonction sort().


    Dans un live, j 'ai un petit exemple ou il utilises plusieurs comparateurs mais lui il déclare les comparateurs et les fonctions associées dans un constructeur de la classe principale (i.e Bin1 dans mon cas).


    La question est ainsi : est ce que je suis obligé de créer un constructeur pour ma classe Bin1 pour y mettre les comparateurs ou non ?? Et ensuite Comment puis je resoudre ce problème de"static reference" ??


    Merci

  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
    le champ comparecode est un champ de la classe Bin1, tu es dans ton main, qui est statique, il n'y a pas d'instance de Bin1 disponible -> pas de champ comparecode disponible.

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 18
    Points : 17
    Points
    17
    Par défaut
    Donc si j'ai bien compris je suis obligé de creer une instance de Bin1, via un constructeur, pour pouvoir accéder à mon comparator !!!!


    Est ce toujours le cas pour les interfaces (car Comparator est une interface )

  4. #4
    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
    ca n'a rien à voir avec le fait que ce soit une interface ou pas, ca a a voir avec le fait que tu stocker ton comparateur dans une champs d'instance de la classe Bin1, donc pour y accéder faut avoir une instance de Bin1. Les solution possibles sont

    -> mettre le champ statique (ca fera moche)
    -> Instancier Bin1 pour que le champ existe
    -> ne pas utiliser le champ mais plutot une variable locale à ton main

Discussions similaires

  1. Réponses: 4
    Dernier message: 29/03/2007, 10h10
  2. formulaire avec des champs multiples
    Par don'de dans le forum Struts 1
    Réponses: 13
    Dernier message: 16/02/2007, 09h42
  3. Tag : present avec des roles multiples
    Par zola dans le forum Struts 1
    Réponses: 4
    Dernier message: 28/04/2006, 18h01
  4. Comment intégrer des applications multiples ?
    Par Vulcanos dans le forum Composants VCL
    Réponses: 8
    Dernier message: 22/09/2005, 23h08
  5. [JONAS][EJB]erreur sur la construction des EJB
    Par silvermoon dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 04/06/2004, 18h53

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