Classe et serialVersionUID
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.
Citation:
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 pense que c'est un bon exemple pour le réécrire en Java.
Je suis arriver à ce résultat :
Code:
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;
}
} |
Ensuite j'ai modifié légèrement pour avoir directement les classes dérivant d'une collection générique.
Code:
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> {
} |
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.
- 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 :
Code:
Tableau = class(TObjectList<Ligne>)
Est ce qu'il existe un équivalent en Java de ce type ?
Code:
class Tableau extends ArrayList<Ligne>;
Merci
EDIT: Je vois des problèmes d'indentation mais sur Eclipse c'est correct..