Problèm avec les tableau en java
nah01
Messages postés
75
Date d'inscription
Statut
Membre
Dernière intervention
-
nah01 Messages postés 75 Date d'inscription Statut Membre Dernière intervention -
nah01 Messages postés 75 Date d'inscription Statut Membre Dernière intervention -
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
}
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
}
A voir également:
- Problèm avec les tableau en java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Tableau word - Guide
- Tableau ascii - Guide
- Trier un tableau excel - Guide
3 réponses
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
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
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
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
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
}
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
}