Problèm avec les tableau en java

Bonjour,
je voudrais créer une classe java nommée : Date. Qui contient les méthodes suivantes (lecture de la date, affichage de la date, suivant( qui prend en paramètre une date et affiche la date suivante), la date précédente.
Pour l’instant mon programme réalise les 2 premières méthodes (lecture et affiche) et pour la méthode : suivant, j’ai déclaré deux tableaux : le premier initialisé avec les 7 jours de la semaine, le second avec les 12 mois. C’est vrai j’ai pas encore traiter tous les cas mais pour l’instant j’aimerai juste que si j’entre « lundi …» comme jour il m’affiche « mardi… »

Le programme compile bien mais en exécutant, au niveau de la méthode :suivant il m’envoi l’erreur : Erreurjava.lang.arrayIndexOutOfBoundsException: 7

Voilà mon code :

import java.io.*;
import java.lang.*;
public class Date
{ String jour;
int num;
String mois;
int annee;

static Date lecture(String j, int n, String m, int A)
{ Date D=new Date();
D.jour=j;
D.num=n;
D.mois=m;
D.annee=A;
return D;
}// fin de la lecture

static Date affiche(Date D)
{System.out.print(D.jour+","+D.num+" "+D.mois+" "+D.annee);
return D;
}//fin affiche

static Date suivant(Date D)
{String J[]={"lundi","mardi","mercredi","jeudi","vendredi","samedi","dimanche"};
String M[]={"janvier","fevrier","mars","avril","mai","juin","juillet","aout","septembre","octobre","novembre","decembre"};

for(int i=1;i<=7;i++)
{ if(D.jour==J[i])
{D.jour=J[i+1];
}
}//for i..
for(int j=1;j<=12;j++)
{if (D.mois!=M[j])
{j+=j;

}//if
else
{D.mois=M[j+1];
}

}//for j..
return D;

}

public static void main(String[] args)
{String x,y,z,t;
int a,b;
try
{
BufferedReader clavier=new BufferedReader(new InputStreamReader(System.in));

System.out.println("Entrer une date svp");
System.out.print("le jour :");
x= clavier.readLine();
System.out.print("le :");
y= clavier.readLine();
a =Integer.parseInt(y);
System.out.print("le mois :");
z= clavier.readLine();
System.out.print(" l'annee :");
t= clavier.readLine();
b= Integer.parseInt(t);

Date D=new Date();
D= lecture(x,a,z,b);
affiche(D);

Date F=new Date();
F=suivant(D);
System.out.print("la date suivante est :");
affiche(F);

}//try
catch(Exception e)
{System.err.println("Erreur"+e);
}//fin catch
}//fin main
}
Configuration: Windows XP
Firefox 2.0

3 réponses

  1. C'est simplement car vous dépassez la taille de votre tableau. En effet, en Java la première case du tableau est celle d'indice 0. Donc quand dans votre première boucle i=7 ça ne peut pas fonctionner surtout que vous utilisez un J+1. Il y a une autre modification à faire pour que lorsque vous arrivez sur dimanche, il ressorte lundi

    for(int i=0;i<7;i++){
    if(D.jour==J[i])
    if (i==6)
    D.jour=J[0];
    else
    D.jour=J[i+1];
    }//for i..

    Voici pour les jours. Vous pouvez enlever les accolades lorsque la condition contient uniquement un élément que ce soit une instruction ou une autre condition mais pensez à marquer l'indentation (ce que je ne peux pas faire ici)

    pour les mois je ne comprend pas trop votre logique, normalement on passe au mois suivant uniquement si on atteint le dernier jour du mois alors expliquez-moi
    1. merci à toi nookz pour les tableaux
      en ce qui concerne les mois je n'avais pas encore achevé le traitement je vais le faire tout à l'heure et je te ferais signe.
      au fait je ne comprend pas bien quand vous dites que je peux enlever les accolades svp expliquez bien
      merci d'avances
      1. Et bien les accolades servent à définir le groupe d'instructions qui sont concernées par l'élément avant les accolades (élément qui peut être une condition, une classe, une méthode, une fonction, une boucle etc...)
        Donc quand il y a une seule ligne de code que vous mettiez :
        if (condition) {
        int i=0;
        }
        int j=2;

        comme seul int i=0; est affecté par la condition, c'est comme si vous écriviez
        if (condition)
        int i=0;
        int j=2;

        car alors la condition ne prendra en compte que la ligne directement en dessous.
        Cependant une condition telle que
        if(condition2)

        else

        est considérée comme une seule instruction dans son ensemble ainsi on peut écrire
        if (condition1)
        if (condition2)
        int i=1;
        else
        int j=1;

        mais on écrit

        if (condition1) {
        //ici commence linstruction de la condition2
        if (condition2)
        int i=1;
        else
        int j=1;
        //ici finit l'instruction de la condition2
        //ici commence l'instruction d'affectation
        int k=3;
        //ici finit l'instruction d'affectation
        }