-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathConstraintExt.java
More file actions
100 lines (87 loc) · 2.95 KB
/
Copy pathConstraintExt.java
File metadata and controls
100 lines (87 loc) · 2.95 KB
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
package tp1;
import java.io.BufferedReader;
import java.util.ArrayList;
/**
* Pour manipuler des contraintes en extension
*
*/
public class ConstraintExt extends Constraint{
private ArrayList<ArrayList<Object>> tuples; // ensemble des tuples de la contrainte
/**
* Construit une contrainte d'extension vide à partir
* d'une liste de variables
*
* @param var la liste de variables
*/
public ConstraintExt(ArrayList<String> var) {
super(var);
tuples = new ArrayList<ArrayList<Object>>();
}
/**
* Construit une contrainte d'extension vide à partir
* d'une liste de variables et d'un nom
*
* @param var la liste de variables
* @param name son nom
*/
public ConstraintExt(ArrayList<String> var, String name) {
super(var,name);
tuples = new ArrayList<ArrayList<Object>>();
}
/**
* Construit une contrainte en extension à partir d'une représentation
* textuelle de la contrainte. La liste de variables est donnée sous la forme : Var1;Var2;...
* Puis le nombre de tuples est indiqué et enfin chaque tupe est donné sous la forme d'une
* suite de valeurs "String" : Val1;Val2;...
* Aucune vérification n'est prévue si la syntaxe n'est pas respectée !!
*
* @param in le buffer de lecture de la représentation textuelle de la contrainte
* @throws Exception en cas d'erreur de format
*/
public ConstraintExt(BufferedReader in) throws Exception{
super(in);
tuples = new ArrayList<ArrayList<Object>>();
int nbTuples = Integer.parseInt(in.readLine()); // nombre de tuples de valeurs
for(int j=1;j<=nbTuples;j++) {
ArrayList<Object> tuple = new ArrayList<Object>();
for (String v : in.readLine().split(";")) tuple.add(v); // Val1;Val2;...;Val(arity)
if(tuple.size() != varList.size())
System.err.println("Le tuple " + tuple + " n'a pas l'arité " + varList.size() + " de la contrainte " + name);
else if(!tuples.add(tuple)) System.err.println("Le tuple " + tuple + " est déjà présent dans la contrainte "+ name);
}
}
/**
* Ajoute un tuple de valeur à la contrainte
*
* @param valTuple le tuple à ajouter
*/
public void addTuple(ArrayList<Object> valTuple) {
if(valTuple.size() != varList.size())
System.err.println("Le tuple " + valTuple + " n'a pas l'arité " + varList.size() + " de la contrainte " + name);
else if(!tuples.add(valTuple)) System.err.println("Le tuple " + valTuple + " est déjà présent dans la contrainte "+ name);
}
/* (non-Javadoc)
* A Implanter !
* @see Constraint#violation(Assignment)
*/
public boolean violation(Assignment a) {
if (a.getVars().containsAll(varList)) {
for (int i=0;i<tuples.size();i++){
int j=0;
while (j < varList.size() && (tuples.get(i).get(j).equals(a.get(varList.get(j)))))
{
j++;
}
if (j==varList.size()) return false;
}
return true;
}
return false;
}
/* (non-Javadoc)
* @see Constraint#toString()
*/
public String toString() {
return "\n\t Ext "+ super.toString() + " : " + tuples;
}
}