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