Premiers exemples de programme Java

Un calcul de pi

Méthode utilisée


Le problème :
simuler par programme le calcul de π  en lançant des fléchettes dans une cible inscrite dans un carré.
Le rapport du nombre de flèches dans la cible sur celui des flèches dans le carré (y compris celles dans le cercle) est égal à π/4

Simulation en Java


La première composante de l'application correspond au fichier Cible.java suivant :


    --> cat Cible.java
    class Cible {
      private int dedans;
      Cible( ) {
         dedans = 0;
         }
      int valDedans( ) {
         return dedans;
         }
      private static double f(double x) {
         // x doit être compris entre -1 et 1
         return Math.sqrt(1 - x*x);
         }
      void lancer( ) {
         // tirage d'un point dans le carré [0,1[ X [0,1[    
         double u = Math.random( );
         double v = Math.random( );
         if (v <= f(u)) dedans++;
         }
    }    

Le fichier contient donc la définition d'une classe Cible encapsulant :


L'application comporte un second fichier de nom Simulation.java dont le contenu est :


   --> cat Simulation.java
   class Simulation {
     private static double calculAire(int n) {
       // évalue l'aire de la cible par une méthode de Monte-Carlo    
       Cible cible = new Cible( );
       for (int i = 0; i < n; i++) cible.lancer( );
          return (double)cible.valDedans( )/n;
        }

     public static void main(String[ ] args) {
       int tirages = Integer.parseInt(args[0]);
       double pi = 4 * calculAire(tirages);
       System.out.println("Pi = " + pi);
     }
   }   

On y trouve la définition de la classe Simulation dont l'exécution par la machine Java va être possible du fait de l'existence d'une méthodes main possédant le profil (nom, liste/type des paramètres, type void du résultat) et les attributs nécessaires (public et static).
On trouve par ailleurs :

Production de code exécutable («bytecode>») et exécution

Les différentes classes sont ensuite compilées  en utilisant la commande javac : l'effet de cette commande est de produire des fichiers d'extension .class contenant du «bytecode» et non du binaire directement exécutable par le processeur comme c'est le cas du résultat fourni par un compilateur C par exemple.
Ces fichiers sont interpétables par la machine virtuelle Java (JVM) au travers de la commande java.
La séquence suivante résume cette suite d'opérations:


   --> javac Cible.java Simulation.java
   --> ls -l Cible.class Simulation.class 
   -rw-r--r--   1 rifflet  users        511 sep   2  2002 Cible.class
   -rw-r--r--   1 rifflet  users        893 sep   4  2002 Simulation.class   
   --> java Simulation
   Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException    
           at Simulation.main(Simulation.java:10)
   --> java Simulation 100000
   3.15172
   --> java Simulation 100000
   3.13956

La première exécution montre comment les erreurs sont signalées en Java sous forme d' exceptions.
Ici l'exception java.lang.ArrayIndexOutOfBoundsException, lorsqu'elle est levée, indique que la commande a été appelée sans paramètre et la fonction a essayé d'accéder au premier argument (en Java comme en C les indices commencent à 0).
Les deux autres demandes d'exécution sont quant à elles correctes puisqu'elle sont réalisées en donnant un paramètre à la commande.



Histoire d'héritage

Ce second exemple illustre rapidement différents aspects du langage et de manière plus générale de la programmation objets (constructeurs, héritage par définition de sous-classe, redéfinition de méthode, instanciation et liaison tardive)



   --> cat Exemple2.java
   class A {
      int a, b;
      A(int x, int y){a = x; b = y;}
      void visualiser( ){
         System.out.println("(" + a + "," + b +")");}
   }
   class B extends A{
      int c;
      B(int x, int y, int z){super(x, y); c = z;}
      void visualiser( ){
          System.out.println("(" + a + "," + b + "," + c + ")"); }   
   }
   public class Exemple2{
      public static void main(String[] arg){
         A a = new A(1, 2);
         B b =new B(4, 5, 6);
         a.visualiser( );
         b.visualiser( );
      }
   }
   --> java Exemple2
  (1,2)
  (4,5,6)
   -->


Dernière mise à jour : 19 juin 2005

Valid XHTML 1.0! Valid CSS!