Préambule Cet exercice doit être fait SANS utiliser Eclipse, l`objectif

EXERCICES JAVA
INTRODUCTION
Préambule
Cet exercice doit être fait SANS utiliser Eclipse, l'objectif étant de tester les commandes
rattachées à l'environnement Java.
a) Construire à l'aide d'un éditeur comme NotePad, JEdit ou UltraEdit un programme
Exemple qui affiche la liste numérotée des arguments de la ligne de commande.
b) Utiliser la ligne de commande et compiler avec : javac Exemple.java
c) Toujours sur la ligne de commande, exécuter le programme avec :
java Programme par1 "exemple de par2" par3
Résultat :
Argument 0 : par1
Argument 1 : exemple de par2
Argument 2 : par3
Remarque : pensez à la variable PATH des systèmes sur lesquels vous travaillez.
Exercice 1 : lecture de programme
1°) Soit la fonction Java suivante :
static int m(int x, int y) { // x et y supposés positifs
if (y == 0) return 0;
else if (y % 2==0) return 2 * m(x, y / 2);
else return x + (2 * m(x, (y - 1) / 2));
}
a) Pourquoi cette fonction est-elle déclarée en static ?
b) Que vaut : m(17,11) ?
c) Que fait exactement cette fonction ?
2°) Soit la fonction suivante :
public static String m2(String a) {
String r="";
for(int i=a.length()-1;i>=0;i--)
r=a.charAt(a.length()-i)+r;
return r;
}
a) Elle est fausse; la corriger
b) Que fait-elle ?
Les Bases de Java page : 64
3°) Soit la classe suivante :
public class TestM {
public static void m1(String s) {
s += "rajout";
}
public static String m2(String s) {
s += " texte a concatener en string";
return s;
}
public static void m3(StringBuffer sb) {
sb.append(" texte a concatener en sbuffer");
}
public static StringBuffer m4(StringBuffer sb) {
sb = new StringBuffer("simple construction");
return sb;
}
public static void main(String[] args) {
String s = "un premier texte";
m1(s);
System.out.println(s);
s = "un deuxieme texte";
m2(s);
System.out.println(s);
s=m2(s);
System.out.println(s);
StringBuffer sb = new StringBuffer("construction sbuffer");
m3(sb);
System.out.println(sb);
sb = new StringBuffer("construction sbuffer 2");
m4(sb);
System.out.println(sb);
sb = m4(sb);
System.out.println(sb);
}
}
Après avoir essayé de comprendre les manipulations mémoire de cet exercice, indiquer ce
que le programme affiche.
Exercice 2
a) La conjecture de Syracuse est basée sur une fonction mathématique très connue, calculant :
f(n) = n/2 si n est pair,
f(n) = 3n + 1 si n est impair
avec n entier naturel.
Les Bases de Java page : 65
Elle affirme que pour n'importe quel entier n, si on calcule successivement n, f(n), f(f(n)),
f(f(f(n))), etc...), on finit toujours par arriver à 1.
écrire une fonction f qui prend en paramètre un entier long n et qui retourne f(n).
écrire un programme qui vérifie la conjecture pour chaque entier entre 1 et 50.
modifier ensuite le programme pour afficher, pour chaque entier n le plus petit
nombre d'itérations nécessaires pour arriver à 1.
Exercice 3
Voici quelques cas de programmation à construire pour tester les exceptions:
construction d'une fonction statique recevant un tableau de chaînes de caractères
contenant normalement des nombres entiers : cette fonction doit ne calculer la
moyenne que des nombres présents dans le tableau (elle émet une exception si il y a
une chaîne et ne prend pas celle-ci en compte)
même question mais dans un programme principal : le tableau de chaînes de
caractères correspond au tableau passé en argument à main. Si une exception est
levée, on affiche un message à l'utilisateur lui indiquant que les arguments étaient
incorrects; dans un deuxième temps, propager l'exception à la JVM (ce qui signifie ne
pas la gérer dans main)
essayer de tester une exception quelconque de nature RuntimeException
Exercice 4
De nombreux codages sont construits en informatique à l'aide d'un alphabet restreint; par
exemple, le français est basé sur l'alphabet {A, ..., Z }, le Morse est basé sur l'utilisation de
{.,-}, les couleurs sur un code hexadécimal compris entre 0 et 9 et A et F, l'ADN sur
l'alphabet {A, C, G, T} (molécules adénine, cytosine, guanine et thymine). A partir de cet
alphabet, des chaînes de longueur quelconque peuvent être construites.
Construire un programme, recevant en paramètres de la ligne de commande deux chaînes de
caractères, un alphabet et une chaîne normalement formé des symboles de cte alphabet, qui :
vérifie si cette chaîne est bien formée (i.e. formée des bons symboles, qu'elles soient
écrites en majuscules, ou en minuscules); le programme affiche un message d'erreur
dans le cas contraire.
opère une rotation de n caractères vers la gauche d'une chaîne (par exemple
gauche(3,"abcdef") renvoie "defabc),
même fonction vers la droite,
si le paramètre est /a, recherche si une autre chaîne également fournie sur la ligne de
commande (exemple : java prog abcd bbac /f ac) est un anagramme du mot fourni
si le paramètre est /o, recherche une suite également fournie sur la ligne de commande
(exemple : java prog abcd bbac /o ac) dans le mot en question, la supprime et affiche
le résultat.
Essayer de construire quelques fonctions et de n'agir que sur la classe String. Aller ensuite
explorer la classe StringBuffer.
Bonus : quelques fonctions supplémentaires pour manipuler les chaînes
rajouter avec /f le nombre d'occurrences du mot cherché
rajouter /an pour afficher tous les anagrammes d'une chaîne reçue en paramètre
Les Bases de Java page : 66
Exercice 5
Le but de ce programme est de pouvoir déterminer un ensemble de mots ne différant les uns
des autres que d'une seule lettre, à partir d'un tableau de mots, en sachant que le mécanisme
est cursif. Un mot ne différant que d'une lettre d'une autre mot est appelé voisin. Par
exemple :
dey bey deb des bec bel ben boy ...
Il faudra donc trouver les voisins d'un mot, puis les voisins des voisins et ainsi de suite
jusqu'au moment où il n'y aura plus de nouveaux voisins.
a) Ecrire un programme modélisant ce traitement (il est possible de commencer par trouver
les voisins d'un mot, puis tous les voisins des voisins et ainsi de suite). Tester les fonctions
sur le la liste des mots suivante :
String[] tabmotgen = { "aas", "ace", "alu", "are", "api", "ays", "bec",
"bel", "bey", "ben", "boy", "deb", "des", "dom",
"dot", "daw", "fax", "fan", "faq", "fob", "hem",
"hop", "man", "mao", "mug","mus", "mie", "sur",
"dey", "mur" };
Trouver tous les mots accessibles depuis bel et aussi depuis dey.
b) Rajouter une fonction permettant de savoir s'il est possible d'aller d'un mot1 à un mot2 en n
coups exactement/
Exercice 6
Construire une applet affichant le tracé d'une fonction mathématique (par exemple, la
fonction sin(x)*x2). Très globalement, sur l'intervalle [-15. +15], les valeurs sont dans
l'intervalle [-80, +80].
void drawLine(int x1, int y1, int x2, int y2) Draws a line, using the current color, between the points
(x1,y1) and (x2,y2) in this graphics context's coordinate
system.
void drawOval(int x, int y, int width, int height) Draws the outline of an oval. (x - the x coordinate of the
upper left corner of the oval to be drawn, y - the y
coordinate of the upper left corner of the oval to be
drawn, width - the width of the oval to be drawn, height -
the height of the oval to be drawn)
void drawPolygon(int[] xPoints, int[] yPoints, int nPoints) Draws a closed polygon defined by arrays of x and y
coordinates.
void drawRect(int x, int y, int width, int height) Draws the outline of the specified rectangle.
void drawString(String, int x, int y) Draws a text
Les Bases de Java page : 67
Exercice 7 et point de cours
Il est important d'apprendre à manipuler un utilitaire de java : l'outil jar.
Cet outil sert à fabriquer des fichiers appe JAR (Java Archive) qui servent à regrouper en
une seule entité tous les fichiers classes, touts les images, ... en bref toutes les ressources
nécessaires au fonctionnement d'un composant logiciel, d'une librairie ou d'une application
(fichiers compilés .class, images, documentation, …).
Le rôle de ces fichiers est fondamental car ils permettent :
de destribuer une bibliothèque java (n'importe quelle bibliothèque comme par
exemple celle du DOM ou de Xerces pour XML)
de destribuer un composant ou une brique logicielle importante (comme un driver de
base de données en Java)
de distribuer une application lourde (ce qui est beaucoup plus simple que de distribuer
un dossier formé de centaines ou de milliers de petits fichiers).
Il faut savoir que dans les fichiers jar, il y a principalement:
des fichiers classes et des fichiers de ressources structurés en répertoires
un fichier texte descriptif du contenu du jar apelle MANIFEST.MF; par exemple si le
jar contient une application lourde, le fichier manifeste doit inclure une ligne donnant
le nom de la classe qui contient la fonction main. Le fichier MANIFEST.MF doit se
terminer par un retour chariot.
Exemple :
Manifest-Version: 1.0
Created-By: 1.6.0 (Sun Microsystems Inc.)
Main-class: nompack.nomClasse (sans .class)
Il est donc cessaire d'apprendre à utiliser cette commande. deux techniques sont
proposées :
l'habituelle technique de la commande en ligne : jar options nomfichierjar
Exemple :
voir le contenu d'un jar : jar tf fichier.jar
créer un fichier jar : jar cv fichier.jar liste_fichiers_à_inclure (peut être * ou un
répertoire)
créer un fichier jar exécutable (java 6) : jar cfe fichier.jar liste_fichiers_à_inclure
(peut être * ou un répertoire)
créer un fichier jar avec son manifeste : jar cmf fichieranifeste fichier.jar
liste_fichiers_à_inclure (peut être * ou un répertoire)
extraire le contenu d'un jar : jar xf fichier.jar
exécuter une application contenue dans un jar : java -jar fichier.jar
Note : si un jar a besoin d'un autre jar, rajouter dans le manifeste :
Class-path: . autrefic.jar
l'utilisation de l'IDE de travail, en particulier Eclipse : il suffit de lancer le menu
File/Export/Jar file pour déclencher un assistant (ou passer le menu contextuel)
Il sera nécessaire de choisir les ressources à inclure dans le jar, chosiir le nom du jar,
de demander à générer le fichier manifest.mf et d'indiquer la classe qui contient le
main.
Les Bases de Java page : 68
1 / 6 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !