Master ISMA 2012-2013 Programmation orient´ ee objets, langage Java 1. Prise en

Master ISMA 2012-2013 Programmation orient´ ee objets, langage Java 1. Prise en main de Java Notre but ici est de commencer ` a ´ ecrire des programmes en Java, mais sans nous occuper pour le moment des objets. Exceptionnellement nous d´ efinirons donc des classes enti` erement faites de membres static (une pratique dont il faudra se d´ eshabituer d` es la semaine prochaine). Note 1. Rappelons la structure minimale d’un programme java : public class NomDeLaClasse { ... public static void main(String[] args) { ici vient le code de la m´ ethode principale } ... } Imm´ ediatement avant et/ou apr` es la fonction main, ` a l’int´ erieur de la classe, se trouvent les d´ eclarations des variables et des autres fonctions requises par le programme. Le texte ci-dessus est ´ ecrit dans un fichier nomm´ e NomDeLaClasse.java. On le compile en tapant la com- mande : javac NomDeLaClasse.java et on l’ex´ ecute par la commande (observez qu’il n’y a plus .java au bout du nom du fichier) : java NomDeLaClasse Note 2. Pour obtenir l’affichage de la valeur d’une variable nomm´ ee x – quel que soit son type – on ´ ecrit une expression du genre de : System.out.println("valeur de x : " + x); Note 3. Pour effectuer des lectures au clavier inspirez-vous de l’exemple suivant : public class Lectures { public static void main(String[] args) { java.util.Scanner clavier = new java.util.Scanner(System.in); int i; float x; System.out.print("donne un nombre entier "); i = clavier.nextInt(); System.out.println("valeur lue: " + i); System.out.print("donne un nombre flottant "); x = clavier.nextFloat(); System.out.println("valeur lue: " + x); } } 1 Introduction ♣Exercice 1.1. ´ Ecrivez une m´ ethode (c.-` a-d. une fonction) nomm´ ee concatenation qui re¸ coit comme arguments deux tableaux de nombres entiers a et b et qui construit et renvoie comme r´ esultat le tableau qui est leur concat´ enation, c’est-` a-dire un nouveau tableau de nombres entiers obtenu en mettant les ´ el´ ements de a et ` a leur suite ceux de b. Pour essayer la m´ ethode concatenation, ´ ecrivez une m´ ethode principale main qui concat` ene deux tableaux explicitement initialis´ es lors de leur d´ eclaration. Autour de la factorielle ♣Exercice 1.2. ´ Ecrivez une m´ ethode factorielle qui prend un entier n en argument et qui calcule et renvoie la valeur de n!, repr´ esent´ ee en pr´ ecision infinie. ´ Ecrivez une m´ ethode principale qui teste la m´ ethode pr´ ec´ edente en calculant et affichant la factorielle d’un nombre donn´ e en argument de la ligne de commande. Exemple d’ex´ ecution : > java Factorielle 100 9332621544394415268169923885626670049071596826438162146859296389 5217599993229915608941463976156518286253697920827223758251185210 916864000000000000000000000000 > Pistes. 1) Pour vous aider, commencez par ´ ecrire une version de la fonction factorielle qui rend comme r´ esultat un entier (c’est-` a-dire, sans utiliser la pr´ ecision infinie). 2) Les arguments de la ligne de commande sont dans le tableau de chaˆ ınes, souvent nomm´ e args, que re¸ coit la m´ ethode main, num´ erot´ es ` a partir de 0 (args[0] est le premier argument, args[1] le second, etc.). 3) Pour trouver comment obtenir l’entier repr´ esent´ e par une chaˆ ıne, allez dans la documentation en ligne de l’API (http://docs.oracle.com/javase/6/docs/api) et cherchez parmi les m´ ethodes statiques de la classe Integer (paquetage java.lang). Ayez ` a l’esprit que pour obtenir la valeur qu’un texte repr´ esente il faut faire l’analyse lexicale (parsing) de celui-ci. Profitez-en pour jeter un oeil sur cette classe modeste et utile. 4) Les entiers en pr´ ecision infinie sont d´ efinis dans la classe java.math.BigInteger. (Notez bien que le paquetage java.math n’est pas la classe java.lang.Math) ♣Exercice 1.3. En gardant la mˆ eme m´ ethode factorielle ´ ecrivez une nouvelle m´ ethode main qui calcule et affiche les factorielles de divers nombres positifs ou nuls lus au clavier. On conviendra que la lecture d’un nombre n´ egatif indique la fin des donn´ ees. ♣Exercice 1.4. ´ Ecrivez une m´ ethode factorielle qui calcule n!. On suppose ici que, contrairement ` a celle de l’exercice pr´ ec´ edent, cette m´ ethode est destin´ ee ` a ˆ etre appel´ ee de nombreuses fois dans un programme. Ainsi, on se propose de m´ emoriser les valeurs k! d´ ej` a calcul´ ees afin de minimiser le temps de calcul lors des appels ult´ erieurs. Pistes. Pour la m´ emorisation des valeurs d´ ej` a calcul´ ees, explorez la classe java.util.Vector. A propos de la date courante ♣Exercice 1.5. Le but des quatre exercices qui suivent est d’essayer diverses mani` eres d’obtenir et afficher la date courante. Ce sont surtout des pr´ etextes pour vous faire feuilleter la documentation en ligne... Premi` ere mani` ere. La m´ ethode java.lang.System.currentTimeMillis() donne la date courante, exprim´ ee comme le nombre de millisecondes qui se sont ´ ecoul´ ees depuis le 1er janvier 1970 ` a 0 heures GMT. C’est pr´ ecis, mais pas tr` es pratique pour donner des rendez-vous ! (Retenez quand mˆ eme l’existence de cette m´ ethode, car elle est bien utile pour mesurer la dur´ ee d’un calcul et comparer les performances des programmes). ´ Ecrivez un programme qui affiche le nombre de secondes ´ ecoul´ ees depuis le 1er janvier 1970. Ex´ ecutez deux fois ce programme, ` a une minute d’intervalle, et voyez si les valeurs obtenues collent (grossi` erement) ` a l’explication. 2 ♣Exercice 1.6. Deuxi` eme mani` ere. Ajoutez au programme pr´ ec´ edent des instructions qui cr´ eent un objet de type java.util.Date (par une expression comme « Date d = new Date(); ») et le donnent ` a afficher ` a System.out. Comme vous le voyez, c’est mieux, car on obtient bien une date, mais ´ ecrite ` a la mani` ere des anglo-saxophones. Ne cherchez pas la correction de ce d´ efaut parmi les nombreuses m´ ethodes de la classe Date, elles sont presque toutes deprecated (d´ esapprouv´ ees, c’est-` a-dire susceptibles de disparaˆ ıtre dans une future version de Java) et ne m´ eritent pas qu’on s’y investisse. ♣Exercice 1.7. Troisi` eme mani` ere. Cr´ eez un objet de type java.util.Calendar (par une expression comme « Calendar c = Calendar.getInstance(); ») et obtenez s´ epar´ ement les ´ el´ ements de la date (le jour de la semaine, le jour du mois, le mois, l’ann´ ee) pour les afficher comme bon vous semble. En ´ etudiant la documentation de la classe Calendar vous d´ ecouvrirez qu’on obtient les divers composants par des expressions de la forme « c.get(Calendar.MONTH); », « c.get(Calendar.YEAR); », etc. Des tableaux de chaˆ ınes constantes d´ eclar´ es comme ceci peuvent vous aider ` a obtenir une pr´ esentation ad´ equate : String[] mois = { "janvier", "f´ evrier", "mars", ... "d´ ecembre" }; String[] jSem = { "lundi", "mardi", "mercredi", ... "dimanche" }; ♣Exercice 1.8. Quatri` eme mani` ere (la plus « pro »). Construisez un objet d de type java.util.Date comme dans la deuxi` eme mani` ere et un objet f de type java.text.SimpleDateFormat (qui est une vari´ et´ e de java.text.DateFormat) et affichez le r´ esultat du formatage du premier par le second, par une expression comme « f.format(d) ». Ne vous laissez pas effrayer par la documentation de SimpleDateFormat. Si vous ne voyez pas comment cela marche, essayez ceci et vous comprendrez : ... Date d = new Date(); SimpleDateFormat f = new SimpleDateFormat("dd MMMMM yyyy HH:mm"); System.out.println("maintenant: " + f.format(d)); ... • • • 3 uploads/Litterature/ td-01-java.pdf

  • 41
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager