Examen008.java
  1 import java.util.Arrays;
  2 
  3 /**
  4  *
  5  * Corrigé de l'examen
  6  */
  7 class A{
  8     private int i;
  9     private int j;
 10     public A(int a, int b){i=a;j=b;}
 11     public int getj(){return j;}
 12     public String toString(){
 13         return("i="+i+" j="+j);
 14     }
 15 }
 16 class B extends A{
 17     private int j;
 18     public B(int a, int b, int c){
 19         super(a,b);j=c;
 20     }
 21     public String toString(){
 22         return(super.toString()+ " j="+j);
 23     }
 24     
 25 }
 26 // question 3.a
 27 abstract class Stat{
 28     abstract double f(int n);
 29     double somme(int n){
 30         double s=0;
 31         for(int i=0;i<n;i++)s+=f(n);
 32         return s;
 33     }
 34     double moyenne(int n){
 35         return somme(n)/n;
 36     }
 37     double mediane(int n){
 38         double[] tab=new double[n];
 39         for(int i=0;i<n;i++)tab[i]=f(i);
 40         Arrays.sort(tab);
 41         return tab[(int) (n)/2];
 42         
 43     }
 44 }
 45 // question 3.b
 46 class StatTab{
 47     double[] data;
 48     public StatTab(int n){data=new double[n];}
 49     public StatTab(double [] t){data=t;}
 50     public double somme(){
 51         double s=0;
 52         for(int i=0;i<data.length;i++)s+=data[i];
 53         return s;
 54     }
 55     public double moyenne(){
 56         return somme()/data.length;
 57     }
 58     public double mediane(){
 59         double tmp[]=new double[data.length];
 60         for(int i=0; i<data.length;i++)tmp[i]=data[i];
 61         java.util.Arrays.sort(tmp);
 62         return tmp[(int)(data.length)/2];
 63     }
 64 }
 65 interface Iter{
 66     void reset();
 67     double suivant();
 68 }
 69 //question 3.c
 70 abstract class Fonction implements Iter{
 71     int val=0;
 72     abstract double f(int n);
 73     public void reset(){val=0;}
 74     public double suivant(){return f(val++);}
 75     
 76 }
 77 //question 3.d
 78 class VersTabIter extends StatTab{
 79     int taille;
 80     public VersTabIter(int n, Iter it){
 81         super(n);
 82         taille = n;
 83         it.reset();
 84         for(int i=0;i<n;i++) data[i]=it.suivant();
 85     }
 86     
 87 }
 88 class examen008 {
 89 static void main(String[] args) {
 90         B b=new B(1,2,3);
 91         // question 2,b
 92         System.out.println(b.getj());
 93         //2
 94         
 95         // question 2,c
 96         A[] ta=new A[10];
 97         for(int i=0; i<ta.length;i++){
 98             ta[i]=new B(i,i+1,i+2);
 99         }
100         System.out.println(ta[1]);
101         // i=1 j=2 j=3
102         B[] tb=new B[10];
103         for(int i=0; i<tb.length;i++){
104             tb[i]=new B(i,i+1,i+2);
105         }
106         A[] tab=tb;
107         System.out.println(tab[1]);
108         // i=1 j=2 j=3
109         A[] tac = new B[10];
110 //        tac[1]=new A(1,2);
111         System.out.println(tac[1]);
112         /*
113          *Exception in thread "main" java.lang.ArrayStoreException: A
114          *at examne2008.main(examne2008.java:63)
115          *Java Result: 1
116          */
117         //question 3.a
118         System.out.println((new Stat() {
119             double f(int n){return n;}}).mediane(10));
120             //question 3.e
121             System.out.println(
122                     (new VersTabIter(4,
123                     new Fonction(){double f(int i){return 2*i;}})).moyenne());
124     }
125 }
126