Programme java

josef4796 Messages postés 17 Date d'inscription   Statut Membre Dernière intervention   -  
josef4796 Messages postés 17 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
salut je suis encore au niveau débutant et j'essaie de faire de petites applications pour mieux assimiler les fondements .
voici un exercice que j' ai fait mais qui n'a pas bien marché.j'ai voulu faire une classe date qui comporte divers méthode comme présenté et qui est une classe interne pour une classe jour qui englobe tout meme la méthode main alors voici le code :


public class jour {
class date
{
private int jour,mois,annee;
void ini(int a, int b,int c)
{ jour=a;
mois=b;
annee=c;

}
private boolean bissextile()
{ if(annee%4==0)
return(true);
else
return(false);
}
int nj()
{
int a;
switch(mois)
{ case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: a=31; break;
case 4 :
case 6:
case 9:
case 11: a=30; break;
default: if(bissextile())
a=29;
else a=28; break;}
return(a);
}
boolean dateValide()
{ if(annee>0)
if((mois>0)&&(mois<12))
if((jour>0)&&(jour<nj()))
return(true);
return(false);
}
date lendemain()
{ if(dateValide())

if(((nj()==30)&&(jour==30))||((nj()==31)&&(jour==31))||((nj()==29)&&(bissextile())&&(jour==29))||((nj()==28)&&(jour==28)&&(!bissextile())))
{ mois++;
if(mois==13)
{annee++;
mois=1;}
jour=1; }
else jour++;
return this;


} int getjour()
{ return(jour);
}
int getmois()
{ return (mois);
}
int getannee()
{ return (annee);
}
void affichedate()
{System.out.println(d1.getjour()+"/"+d1.getmois()+"/"+d1.getannee());
}

}


public static void main(String[] args) {
date d1 = new date(Integer.parseInt(args[0]),Integer.parseInt(args[1]),Integer(args[3]));

d1.affichedate();
if(d1.dateValide())
{System.out.println("le nombre de jours de ce mois est"+d1.nj());
System.out.println("la date de lendemain est"+d1.lendemain());}
else
System.out.println("desolée la date n est plus valide");



}
}


voici le resultat de compilation:
C:\JCreatorV4\MyProjects\jour\src\jour.java:83: No enclosing instance of class jour is in scope; an explicit one must be provided when creating inner class jour. date, as in "outer. new Inner()" or "outer. super()".
date d1 = new date(Integer.parseInt(args[0]),Integer.parseInt(args[1]),Integer(args[3]));

Si quelqu un peux me dire comment le faire j ai essayé mille et une solution!! Merci d avance
A voir également:

3 réponses

josef4796 Messages postés 17 Date d'inscription   Statut Membre Dernière intervention   3
 
et ben j ai pensé ici a faire une classe interne et savoir si jamais on peut instancier des objets de cet classe tandis que la classe qui englobe différente.Par ce que à ce que je savis si on a une classe interne alors celle ci peut manipuler les privés de la classe qui l englobe et maintenant je veux savoir si le contraire reste vrai ?
1
Posotaz Messages postés 489 Date d'inscription   Statut Membre Dernière intervention   225
 
Salut,

Oui il est possible d'instancier un objet "classe interne" dans la classe qui l'englobe. En effet cette classe a accès aux objets de la classe qui l'englobe, c'est tout à fait normal car une classe interne se comporte comme une méthode interne (membre si tu préfères ce terme), elle a forcément accès aux propriétés et méthodes membres. L'inverse n'est pas vrai, comme tu le sais un objet déclaré localement dans un bloc n'est disponible que dans ce bloc ; par contre tu peux utiliser des accesseurs mais uniquement après avoir instancié un objet "classe interne", à moins que tu n'utilises des propriétés ou méthodes statiques auxquels tu pourras accéder de la façon suivante : Date.nomPropriete mais uniquement depuis la classe englobante (Jour).

- Un conseil : définis toujours explicitement si tes propriétés et méthodes sont publiques, privées ou protégées.
- Un autre conseil : tes noms de classe devraient toujours commencer par une majuscule (Jour, MyDate).
- Encore un autre conseil : quand le nom de tes propriétés et méthodes est composé de plusieurs mots, à partir du deuxième mets une majuscule (afficheDate(), getJour()).

Sinon je ne sais pas t'aider, en plus d'avoir des erreurs de compilation il me semble qu'il manque du code, comme par exemple un constructeur ayant la signature date(int, int, Integer) (avec un doute certain sur le troisième argument, tu as sans doute voulu employer la méthode statique parseInt mais tu t'es emmêlé les pincaux).

Tes erreurs de compilation :

- Le constructeur Integer(String) n'existe pas, de plus on utilise l'opérateur new pour appeler un constructeur. Tu as sans doute voulu faire Integer.intValue(args[3]). 3 ? c'était le bon indice ?

- La variable d1 est indéfinie.

- (et n'oublie pas les imports).

Bon courage !
1
josef4796 Messages postés 17 Date d'inscription   Statut Membre Dernière intervention   3
 
Merci pour l aide infiniment
1