Bonjour,
Je quitte prochainement le Delphi pour partir sur un poste de développeur Java. Je me documente sur Java pour arriver avec un petit bagage.
A l'époque j'avais écrit en Delphi un moyen de calculer le Lattice path avec le triangle de Pascal.
Je pense que c'est un bon exemple pour le réécrire en Java.En mathématiques, le triangle de Pascal est une présentation des coefficients binomiaux dans un triangle. Celui-ci permet de résoudre le problème du Lattice Path ou il faut calculer le nombre de chemins possible pour traverser un carré un partant du coin supérieur droit pour arriver au point en bas à gauche en se déplacent uniquement sur la droite et le bas.
Je suis arriver à ce résultat :
Ensuite j'ai modifié légèrement pour avoir directement les classes dérivant d'une collection générique.
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 import java.util.ArrayList; public class Calcul { public static void main(String[] args) { System.out.print(GetResultat(20)); } public static long GetResultat(int aValue) { ArrayList<Ligne> tab = new ArrayList<Ligne>(); tab.clear(); for(int i = 0; i <= aValue * 2; i++) { Ligne ln = new Ligne(); for(int j = 0; j <= i; j++) { // création de la cellule Cellule cel = new Cellule(); // chaque ligne commence et termine par un 1 if ((j == 0) || (j == i)) { cel.Value = 1; } else { // la valeur de la cellule est égale à la somme sur la ligne précédente // de la valeur de la cellule du même index - 1 plus la valeur de la cellule du même index cel.Value = tab.get(tab.size() - 1).Cellules.get(j - 1).Value + tab.get(tab.size() - 1).Cellules.get(j).Value; } // ajout de la cellule dans la ligne ln.Cellules.add(cel); } // ajout de la ligne dans le tableau tab.add(ln); } return tab.get((int) (aValue * 2)).Cellules.get((int) aValue).Value; } } class Cellule { long Value; } class Ligne { ArrayList<Cellule> Cellules = new ArrayList<Cellule>(); public String ToString() { String res = ""; for(int i = 0; i <= Cellules.size() - 1; i++) { res += Cellules.get(i).Value; } return res; } }
Avec cette méthode, j'ai un avertissement sur la classe Cellule et sur la classe Tableau car je n'ai pas de constante serialVersionUID.
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 import java.util.ArrayList; public class Calcul { public static void main(String[] args) { System.out.print(GetResultat(2)); } public static long GetResultat(int aValue) { Tableau tab = new Tableau(); tab.clear(); for(int i = 0; i <= aValue * 2; i++) { Ligne ln = new Ligne(); for(int j = 0; j <= i; j++) { // création de la cellule Cellule cel = new Cellule(); // chaque ligne commence et termine par un 1 if ((j == 0) || (j == i)) { cel.Value = 1; } else { // la valeur de la cellule est égale à la somme sur la ligne précédente // de la valeur de la cellule du même index - 1 plus la valeur de la cellule du même index cel.Value = tab.get(tab.size() - 1).get(j - 1).Value + tab.get(tab.size() - 1).get(j).Value; } // ajout de la cellule dans la ligne ln.add(cel); } // ajout de la ligne dans le tableau tab.add(ln); } return tab.get(aValue * 2).get(aValue).Value; } } class Cellule { long Value; } class Ligne extends ArrayList<Cellule> { public String ToString() { String res = ""; for(int i = 0; i <= this.size() - 1; i++) { res += this.get(i).Value; } return res; } } class Tableau extends ArrayList<Ligne> { }
- Je vois pas tellement ce que c'est, est-ce que quelqu'un peut m'expliquer son intérêt ?
- Et est-ce que mon code comprend des erreurs pour un développeur Java ?
Dernier point, en Delphi je peux déclarer une variable Tableau comme liste de Ligne comme ceci :
Est ce qu'il existe un équivalent en Java de ce type ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part Tableau = class(TObjectList<Ligne>)
Merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part class Tableau extends ArrayList<Ligne>;
EDIT: Je vois des problèmes d'indentation mais sur Eclipse c'est correct..
Partager