US

Projet 4 : Objets

Ce projet va nous permettre de découvrir les objets et leur manipulation en en utilisant quelques-uns. Le programme que nous allons écrire dans le cadre de ce projet est un programme qui calcule les racines d'un polynôme du second degré. On va utiliser l'objet Scanner qu'on a vu dans le tutoriel et qui va nous permettre de lire des données sur l'entrée standard. Avant de commencer le projet, il vous est vivement conseillé de lire le chapitre 4 du tutoriel.

Créer le projet

Comme d'habitude, on va créer le projet et lui donner comme nom Projet4, mais cette fois-ci, on va devoir utiliser Java 5 au minimum. Pour vérifier la version qui est utilisée pour ce projet, cliquez sur le lien Configure JREs... dans la partie JRE de la fenêtre. Ensuite, dans la nouvelle fenêtre qui s'ouvre, cliquez sur Compiler dans la colonne de gauche et vous tombez sur la fenêtre suivante dans laquelle vous pouvez choisir la version de Java à utiliser avec Compiler Compliance Level.

Créer le projet et choisir la version de Java
fig j1 Créer le projet et choisir la version de Java

Une fois le projet créé, ajoutez-lui une classe, nommée Projet4, avec une méthode main.

Auto-complétion

Un outil très intéressant qui permet de faciliter et d'accélérer le codage de vos programmes Java avec Eclipse est l'auto-complétion de code. Cet outil va vous permettre de compléter automatiquement des extraits de code que vous avez commencé à écrire.

Pour découvrir cet outil, commencez par compléter le corps de la méthode main en tapant Scann et enfoncez ensuite les touches CTRL + ESPACE de votre clavier. Une liste d'éléments qui commencent par Scann vous sera proposée, il ne reste plus qu'à choisir l'élément désiré (Scanner - java.util) et faire ENTER. Si vous êtes connecté à Internet, vous verrez également la documentation de la classe Scanner s'afficher dans une boite jaune à droite.

Auto-complétion
fig j2 Auto-complétion

Cet outil vous permet donc de découvrir les éléments disponibles dans votre environnement de travail (faites CTRL + ESPACE en ayant rien tapé vous montrera tous les éléments disponibles) et de les insérer sans pour autant taper leur nom complet. Votre oeil attentif aura peut-être également remarqué que la commande a également ajouter l'instruction d'importation, en effet, la classe Scanner se trouve dans le package java.util.

1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
// Projet4.java
 
import java.util.Scanner;
 
/**
* Description
*
* @author Sébastien Combéfis
* @version 18 sept. 2008
*/
public class Projet4
{
    /**
     * Méthode principale
     */
    public static void main (String[] args)
    {
        Scanner
    }
}
listing j1 Classe Projet4 initiale

Le projet

Le listing j1 montre la classe dans son état actuel, elle ne compile d'ailleurs pas étant donné qu'on a une instruction qu'on n'a toujours pas fini de taper. On va maintenant pourvoir commencer à coder le programme souhaité. N'oubliez pas de garder les doigts près des touches CTRL et ESPACE pour aller plus vite !

Plan

Le programme est constitué de plusieurs étapes dont voici les résumés :

  • Petit message d'accueil ;
  • Demande des coefficients du polynôme et vérification de ceux-ci ;
  • Calculer les racines du polynôme ;
  • Afficher le résultat.

Créer le Scanner

On aura besoin d'un objet de type Scanner pour pouvoir lire ce que l'utilisateur a entré au clavier dans la console. On doit donc créer un objet de type Scanner et garder une référence vers cet objet dans une variable de type objet. On crée donc cet objet avec l'instruction suivante :

1 
Scanner scanner = new Scanner (System.in);
listing j2 Création d'un objet Scanner

Pour pouvoir créer un objet de type Scanner, il passer au constructeur l'entrée standard (System.in) afin de dire que l'on veut pouvoir lire à partir de celle-ci. N'oubliez pas que pour en savoir plus sur les classes de la librairie standard Java, vous pouvez consulter la documentation de l'API Standard Java en ligne.

Message d'accueil

La seconde chose à faire est d'afficher à la console un petit message d'accueil. On utilise pour cela la sortie standard représentée par l'objet System.out. On va utiliser la méthode println pour afficher une ligne de texte à la console.

1 
2 
3 
out.println ("Bienvenue dans le résolveur d'équations du second degré.");
out.println ("Veuillez maintenant préciser les coefficients de l'équation :");
out.println ("ax^2 + bx + c = 0");
listing j3 Afficher un message d'accueil

Pour pouvoir écrire directement out ou lieu d'écrire System.out, il ne faut pas oublier l'import statique de cet objet en ajoutant l'instruction suivante au début du fichier.

1 
import static java.lang.System.out;
listing j4 Import statique de out

Demander les coefficients

Il s'agit maintenant de demander à l'utilisateur d'encoder les coefficients de l'équation et de les stocker dans des variables. Les coefficients sont des nombres réels, on va donc opter pour le type primitif double.

Comment faire pour lire un double sur l'entrée standard ? On utilise bien sûr l'objet de type Scanner que l'on vient de créer et on va en particulier utiliser trois méthodes de la classe Scanner dont voici les signatures :

public boolean hasNextDouble();
public String next();
public double nextDouble();

La première des trois méthodes permet de savoir si l'utilisateur a entré un nombre réel ou pas. Tant que celui-ci tape n'importe quoi, il faut donc lui dire de taper un nombre réel. Une fois qu'il aura tapé un nombre réel, on pourra l'enregistrer en le récupérant avec la méthode nextDouble et ensuite demander le coefficient suivant. Voici donc ce que ça donne :

1 
2 
3 
4 
5 
6 
7 
8 
out.print ("a ? ");
while (! scanner.hasNextDouble())
{
    out.println ("Veuillez entrer un nombre réel !");
    out.print ("a ? ");
    scanner.next();
}
double a = scanner.nextDouble();
listing j5 Demander un coefficient

Quelques explications s'imposent ... On commence donc par afficher une demande à l'utilisateur a ? . Ensuite, on entre dans une boucle while qui se traduit par Tant que l'utilisateur n'a pas encodé un nombre réel, afficher un message d'erreur et lui redemander d'encoder un réel.

Dans le corps de la boucle while, on utilise scanner.next(); qui permet d'enlever l'élément que l'utilisateur a encodé et qui n'est pas un double, si on omet cette ligne, on se retrouve avec une boucle infinie ...

Une fois que l'utilisateur a enfin entré un nombre réel, on sort de la boucle et on enregistre ce nombre dans une variable de type primitif double en le récupérant avec nextDouble. Il ne reste plus qu'à répéter la même opération pour b et c. Ce n'est certes pas très élégant, mais avec nos connaissances actuelles, on ne peut pas faire mieux ...

Calcul des racines

La première étape pour calculer les racines d'un polynômes du second degré, c'est de calculer le déterminant qui est donné par la formule b2 - 4ac.

1 
double rho = (b * b) - (4 * a * c)
listing j6 Calcul du déterminant

Notez que l'on aurait pu utiliser la méthode pow de la classe Math pour calculer b2, mais celle-ci serait moins efficace dans ce cas-ci car appeler une méthode est moins efficace qu'utiliser les opérateurs arithmétiques.

Maintenant que l'on a la valeur du déterminant, on sait combien de racines admet le polynôme, et on peut en calculer les valeurs facilement. On va donc traiter les trois cas différents avec une instruction if-else.

1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
if (rho < 0)
{
    out.println ("-> L'équation n'admet aucune racine réelle.");
}
else if (rho == 0)
{
    double x1 = -b / (2 * a);
    out.printf ("-> L'équation admet une racine réelle double : %f\n", x1);
}
else
{
    double rhosqrt = sqrt (rho);
    double x1 = (-b + rhosqrt) / (2 * a);
    double x2 = (-b - rhosqrt) / (2 * a);
    out.printf ("-> L'équation admet deux racines réelles : %f et %f\n", x1, x2);
}
listing j7 Calcul des racines

Pour le cas avec deux racines, on doit calculer la racine carrée de rho, on utilise donc la méthode sqrt de la classe Math que l'on a importé statiquement pour ne pas devoir écrire Math.sqrt. Remarquez également l'utilisation de la méthode printf pour faire une sortie formatée. On aurait pu s'en passer et utiliser la concaténation de chaine de caractères.

Pour aller plus loin

Vous vous rappelez sans doute que pour fonctionner, cette technique de calcul des racines d'un polynôme du second degré fait l'hypothèse que le coefficient a est différent de zéro. Ajoutez ce test supplémentaire au programme afin d'éviter une erreur d'exécution au cas où l'utilisateur encode zéro pour a.

Dans le calcul des racines, repris au listing j7, vous aurez remarqué que l'on a déclaré deux fois la variable x1, n'est-ce-pas une erreur ? Si non, pourquoi cela est possible ?

Enfin, ici on travaille avec le type primitif double et on est donc limité quand aux valeurs que peuvent prendre les coefficients. Réécrivez le même programme mais en utilisant des objets BigDecimal au lieu du type primitif double.

Résumé des points importants

  • Deux types de données en Java : type primitifs et objets ;
  • On crée des objets avec l'opérateur new ;
  • Pour appeler une méthode d'une classe, on utilise l'opérateur . sur l'instance de la classe ou sur le nom de la classe pour les méthodes statiques ;
  • Tout programme possède une entrée, une sortie et une sortie d'erreur standards représenté par System.in, System.out et System.err ;
  • Pour tout renseignement sur les classes et méthodes de la librairie standard Java, vous pouvez consulter la documentation de l'API Standard Java en ligne.

N'hésitez pas à télécharger le projet.

Testez vos connaissances

Nous voilà déjà au bout de ce quatrième projet pratique. Nous vous proposons maintenant de vous tester en faisant les divers exercices du quatrième chapitre. Vous pourrez ensuite continuer le tutoriel et passer au cinquième chapitre qui aborde l'écriture de classe. Mais avant d'attaquer ce chapitre, vous devez bien comprendre ce que sont les objets et comment les utiliser, c'est primordial.

Pour tout problème, toute remarque, rendez-vous sur le forum consacré aux exercices pratiques.

  • Espace membre
  • Learning Center
  • Les forums
  • Livre d'or
  • Imprimer
  • Boutique
  • Info
  • Règlement
  • Erreur
  • Newsletter

MyPagerank.Net

Firefox 3.6

Browse Happy logo

Open Clip Art Library

Join our Facebook Group

Twitter

Copyright © 2000-2018 UKO. Toute reproduction strictement interdite sans autorisation du webmaster

Valid XHTML 1.1 !
Valid CSS2 !
Level Triple-A conformance icon, W3C-WAI Web Content Accessibility Guidelines 1.0
ICRA Internet Content Rating Association
Creative Commons License
Site optimisé pour Firefox avec une résolution 1024x768 --- Page chargée en 0.0749512 secondes --- This site uses Thumbshots previews