Bonjour,
Je désire faire un TAD liste, qui est composé d'un tableau de dates à partir de la classe Date ci-dessous et composé également des champs jours, mois et année, ainsi qu'un entier l, lequel représente la longueur.
Je suis obligé par mon prof à utiliser la récursivité dans les méthodes static de la classe liste, et à utiliser 2 constructeurs listevide() et Liste().
Je n'ai pas inclus les exceptions quand la liste est vide pour le moment.
En exécutant, j'ai toujours une erreur comme suit:
Voici mon codeException in thread "main" java.lang.StackOverflowError
at Liste.<init>(Liste.java:13)
at Liste.listevide(Liste.java:19)
at Liste.longueur(Liste.java:38)
at Liste.adjq(Liste.java:50)
La classe liste
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 public class Date { private int j,m,a,nbr; private boolean t; public Date(int j, int m, int a)throws ErrConst{ if ( m>12 || j>nbrjour(m,a) ) throw new ErrConst(); else this.j=j; this.m=m; this.a=a; } public int jour(){return j;} public int mois(){return m;} public int année(){return a;} public int difference (Date b){ int s = (j-b.j)+ (m-b.m)*nbrjour(m,a)+(a-b.a)*365; return (Math.abs(s)); } public int nbrjour(int m, int a){ if ((m==1) || (m==3) || (m==5) || (m==7) || (m==8) || (m==10) || (m==12)) { nbr=31;} else {if( (m==4) || (m==6) ||(m==9)||(m==11)) nbr=30; else {if (m==2){if (bissextile(a)) nbr=29; else nbr = 28;} }} return(nbr);} public void avancer(int x){ j=this.j+x; while (j > nbrjour(m,a)){ j-=nbrjour(m,a); if (m<12) m++; else{ m=1; a++;} }} public boolean bissextile(int a){ if (a%4==0){t=true;} return (t);} public String toString(){ return ("("+j+"/"+m+"/"+a+")"); } }
Classe d'exécution
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 public class Liste { public int l; public Date [] a; public static boolean est_vide(Liste t){ if (t.a[0]==null){return (true); } else {return (false);}} public static Date premier(Liste t){ return t.a[0]; } public Liste(){ a= new Date[10]; l=0; } public static Liste listevide(){ Liste h=new Liste(); h.l=0; h.a=new Date[10]; return h; } public static Liste cons(Liste t,Date d){//pour ajouter une date a la liste// if (est_vide(t)){ t.a[0]=d; t.l++;} else{ t.l++; for (int i=t.l-1;i>0;i--) { t.a[i]=t.a[i-1];} t.a[0]=d;} return t;} public static int longueur(Liste t) {if (t==listevide()) return 0; else return 1+longueur(reste(t)); } public static Liste reste(Liste t) { t.l--; { for(int i=0;i<t.l;i++) { t.a[i]=t.a[i+1];} return t; }} public static Liste adjq(Liste t,Date d){ if (t==listevide()) return (cons(listevide(),d)); else return cons(adjq(t,d),d); } public static boolean appartient(Liste t,Date d){ if (t.a[0]==d) return (true); else return (appartient(reste(t),d)); } }Quelqu'un saurait-il m'indiquer d'où peut venir le problème ?
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 public class Dateexe { public static void main(String[] args) { try{ Liste t=new Liste(); Liste.listevide(); Date a=new Date(1,8,2013); Date b= new Date(2,8,2013); Date c=new Date(3,8,2013); Date d=new Date(4,8,2013); Liste.cons(t,a); Liste.cons(t,b); Liste.cons(t,c); Liste.adjq(t,d); System.out.println(Liste.longueur(t)); for (int i=0;i<Liste.longueur(t);i++) {System.out.println(t.a[i]);} System.out.println("la premiere Date est : "+Liste.premier(t)); System.out.println("le reste des dates est : "); Liste.reste(t); for (int i=0;i<Liste.longueur(t);i++) {System.out.println(t.a[i]);}} catch (ErrConst e){System.out.println("Date invalide!");} }}
Merci d'avance pour votre aide.
Partager