Exercices java

Cours 0.1, 0.2, 1.0 et 1.1- Syntaxes de base en java




Ex 0
Reprendre l'ensemble des deux premier cours (1.0 et 1.1), être capable de reproduire les étapes de compilation et d'exécution, arriver à reproduire et expliquer les affichages annoncés. Un test que vous pouvez faire entre-temps : utilisez le bloc-note pour ouvrir le fichier Facture.class après la première compilation de Facture.java. Comment interprétez-vous ce que vous voyez ?


Ex1
public class Premier
{

public static void main(String[] args)
	{
	double a;
	a=5;
	double b;
	b=a*2;
	System.out.println("Le double de "+a+" est "+b); 	
	}	
}



Ex2
Observer ce qui suit, et indiquez ce qui est ou n'est pas une déclaration et ce qui est ou n'est pas valide :


Ex3
Donnez les valeurs de chaque variable après chaque instruction.
int valeur=2;
valeur=valeur+1;
valeur=valeur*2;
valeur=valeur%5;


int a=5;
int b=7
a=b;
b=a;


int x=2,y=10,z;
z=x+y;
x=5;
z=z-x;


int valeur=7,chiffre=2,i1,i2;
double f1,f2;

i1=valeur/chiffre;
i2=chiffre/valeur;
f1=(double)(valeur/chiffre);
f2=(double)(valeur/chiffre)+0.5;
i1=(int)f1;
i2=(int)f2;
f1=(double)valeur/(double)chiffre;
f2=(double)valeur/(double)chiffre+0.5;
i1=(int)f1;
i2=(int)f2;



Ex4
Quel affichage va produire le code suivant :
int i=223,j=135;
double a=335.5,b=20.5;
System.out.println("La valeur de i : "+i);
System.out.println("Pour un montant de "+a+" le total vaut : "+i+j);
System.out.print("Apres reduction de "+b+" %, vous gagnez : ");
System.out.println((a*b)/100+" euros");
System.out.print("la variable R= "+R+" et T= "+T);



Ex5
1- Quel affichage va produire le code suivant une fois saisi dans le main :
int i;
double x;
System.out.println(i+" "+x);


2- Saississez le code suivant dans le main et exécuter
int i=5;
Integer val=new Integer(5);
System.out.println(i+" "+val);
Sachant que str est un objet et en ayant lu le cours 0.2, comment interpréter le rendu visuel ?

Cours 1.2- Les objets en java




Ex1
L'objectif est de définir une représentation d'un objet Personne. On considère ici qu'une personne est définie par un attribut boolean pour signifier qu'elle est mariée ou non, un age, un numéro de personne.


Ex2
Soit la classe Facture.java définie pendant le cours. Supposons qu'on rentre le code suivant dans le main :
Facture fact=new Facture(5,6);
fact.calculMontant();
double x=fact.montant;
x+=5;
System.out.println("fact.montant : "+fact.montant);
System.out.println("x:  "+x);
Expliquez ce qui va apparaître et vérifiez le en compilant après avoir renseigné le main().


Ex3
Testons un affichage un peu particulier. Utilisons la classe Facture définie pendant le cours. Quel affichage donnent les instructions suivantes saisies dans le main :
Facture fact=new Facture(5,6.7);
System.out.println("fact.prixUnitaire : "+fact.prixUnitaire);
System.out.println("fact : "+fact);
Commentez en faisant des hypothèses.


Ex4
Expliquez ce qui va apparaître en saisissant les instructions suivantes dans le main() :
Facture fact1=new Facture(6,1.9);
Facture fact2=new Facture(4,6);
fact2=fact1;
fact1.prixUnitaire=fact1.prixUnitaire+5;
fact2.prixUnitaire+=7;
System.out.println(fact1.prixUnitaire+" "+fact2.prixUnitaire);



Ex5
Expliquez ce qui va apparaître à la compilation du code suivant :
Facture fact1=new Facture(6,1.9);
Facture fact2=new Facture(4,6);
fact2=fact1;
fact1=null;
fact1.prixUnitaire=fact1.prixUnitaire+5;
Expliquez.


Ex6
Lisez le code suivant :
public class Fonction{

public static void main(String[] args)
	{
	/*Declaration de variables*/
	int a,compteur;
		for(compteur=0;compteur<=5;compteur++)
		{
		a=calculer(compteur);
		System.out.print(a+" a");
		}
	}//fin de main

public static int calculer(int x)
	{
	int y;
	y=x*x;
	return y;
	}//fin de calculer()
}//fin de class



Ex7
Soit la fonction :

public static int f(int x)
	{
	int resultat;
	resultat=-x*x+3*x-2;
	return resultat;
	}



Ex8
Soit la classe facture définie dans le cours Que constatez vous ? Quelle explication pouvez vous en donner ?


Ex9
public class Facture4{

public double montant=5.5;

public static void reduireMontant(double reduction)
	{
		if(reduction<=1 && reduction>=0)
		montant=montant*(1-reduction);
	}

public static void main(String[] args)
	{
	reduireMontant(0.05);
	}

}


Avant d'exécuter ce code : va t'il ou non produire une erreur ? Quel type d'erreur ? Exécutez le code pour vérifier vos suppositions.


Ex10
Facture f1=new Facture(4,5.5);
Facture f2=new Facture(3,5.7);
System.out.println(f1.nbUnitesVendues==f2.nbUnitesVendues);
System.out.println(f1.prixUnitaire==f2.prixUnitaire);
System.out.println(f1==f2);
f2.prixUnitaire=5.5;
f2.nbUnitesVendues=4;
System.out.println(f1.nbUnitesVendues==f2.nbUnitesVendues);
System.out.println(f1.prixUnitaire==f2.prixUnitaire);
System.out.println(f1==f2);
f1=f2;
System.out.println(f1==f2);
Quel affichage produit le code précédent ? Expliquez.


Ex11
On travaille avec la classe Facture du cours


Ex12
Qu'affiche le programme suivant ?

int i;
int[] valeur=new int[6];
valeur[0]=1;
	
	for(i=1;i<valeur.length;i++)
	{
	valeur[i]=valeur[i-1]+2;
	}
	for(i=1;i<valeur.length;i++)
	{
	System.out.println("valeur["+i+"]="+valeur[i]);
	}	



Ex13
On veut créer une classe "UtilitairesTableaux", implémentez les fonctionnalités suivantes :


Ex14
Expliquez ce qui va s'afficher et justifiez sans exécuter
int i;
	for(i=1;i<=5;i=i+1)
	{
		for(i=1;i<=2;i=i+1)
		{
		System.out.println("i = "+i);
		}
	}



Ex15 - classes interne
On créer une classe Cercle avec une classe internet Centre qui a deux champs private : abscisse et ordonnée. La classe Cercle a deux champs : Centre et rayon. Proposez une fonction de déplacement de la classe Cercle. Que constatez vous à la compilation dans le repertoire ?


Ex16
public class Test{

	public String str="";	

	public int att=0;

public Test(String st2,int m)
	{
	str=st2;
	att=m;
	}

public static void main(String[] args)
	{
	String ch="chaineCaracteres";
	int n=4;
	Test t=new Test("chaineCaractere",n);
	
	t.str+=" concatenee";
	t.att+=5;
	System.out.println(ch);
	System.out.println(n);
	ch+="\t par +";
	n+=4;
	System.out.println(ch);
	System.out.println(n);
	System.out.println(t.str);
	System.out.println(t.att);
	}
}


Expliquer ce qui va s'afficher et tester.


Ex17
Définir une méthode qui prend une variable de type char et une String en entrée et compte le nombre d'occurences du caractère dans la chaîne.


Ex 18
Quelques questions de cours :


Ex 19
Dans la classe suivante, les lignes sont numérotées en commentaires.
public class A{			//1

	public int nombre;	//2

	public double valeur;	//3

public String recuperationNom()	//4
	{			//5
	return "test";		//6
	}			//7

public int getNombre()		//8
	{			//9
	return this.nombre;	//10
	}			//11

}				//12






Ex 20
Soient deux méthodes :
public double meth1(double x)
	{
	return 2*x;
	}

public void meth2(double x)
	{
		if(x<0)
		return -x;
		else
		return x;
	}
  • Expliquer ce que fait la méthode meth1()


  • Expliquer ce que fait la méthode meth2()





  • Ex 21
    Soit une classe : écrivez les instructions d'appel au contructeur, d'appel de la méthode x sur l'objet instancié.
    public class A
    {
    
    public String x(int n)
    	{
    	return ""+n;
    	}
    }
    



    Ex 21
    Soit une classe :
    public class TestP
    {
    
    	int nombre=67;
    
    public TestP(int t)
    	{
    	this.nombre=t;
    	}
    
    public double somme(int nombre,int t)
    	{
    	double x=t+nombre;
    	return x;
    	}
    
    public double somme2(int nombre,int t)
    	{
    	return t+this.nombre;
    	}
    
    public int max(int nombre)
    	{
    		if(nombre>this.nombre)
    		return nombre;
    		else
    		return this.nombre;
    	}
    }
    
    public static void main(String[] args)
    	{
    	TestP obj=new TestP(55);
    	System.out.println(somme(56,55));
    	System.out.println(somme2(56,55));
    	System.out.println(max(56));
    	System.out.println(max(54));
    	}
    }
    


    Anticipez ce que va donner l'évolution du main, exécutez et testez votre anticipation.


    Ex 22
    Dans le package java.util, on dispose d'une classe Random qui fournit des méthodes de tirages aléatoires :
    Random alea=new Random();
    int i=alea.nextInt(100);//affecte à i un entier dans [0:99]
    double x=alea.nextDouble();//affecte à x un réel dans [0:1]
    


    Proposez la création d'une classe qui offre plusieurs méthodes :
  • Une méthode de tirage aléatoire d'un nombre réel sur [0:x] avec x réel positif passé en paramètre


  • Une méthode de tirage aléatoire d'un nombre entier multiple de 2 sur [0:n] avec n entier passé en paramètre




  • Proposez ensuite un test pour ces méthodes.


    Ex 23
    Soit une premiere classe :
    public class Action{
    
    	private double cours;
    
    	private String nomAction;
    
    public double getCours()
    	{
    	return cours;
    	}
    
    public void setCours(double cours)
    	{	
    	this.cours=cours;
    	}
    }
    


    et une seconde classe :

    public class Marche{
    
    	private Action[] ensembleActions=null;
    
    public Action getAction(int i)
    	{
    		if(ensembleActions.length<i && ensembleActions.length>=0)
    		{
    		return ensembleActions[i];
    		}
    		else
    		{
    		return null;
    		}
    	}
    }
    
    On dispose d'un objet de type Marche : mche. Donnez le code pour augmenter de 10% le cours de l'ensemble des actions. De plus, proposez un code pour le calcul de la moyenne de la valeur des actions.


    Ex24
    On considère l'instruction if(a && b)
    1) Est-ce que la machine doit toujours tester la condition logique a et la condition logique b pour évaluer la condition logique (a && b) ?
    2) Est-ce que la machine teste on non les deux conditions systématiquement ? Imaginez une procédure pour le tester.
    3) Soit une boucle for(int i=0;i<5;i++), on a des instructions, une condition, des instruction : for(instruction;condition;instruction). Imaginez un moyen d'afficher un message à chaque fois que la condition est testée.


    Ex25
    Imaginez une fonction statique qui prenne en entrée un tableau double[][] tab. tab est une matrice de jeu telle que tab[i][j] est le score du joueur 1 lorsque le joueur 1 joue i et le joueur 2 joue j. Affichez les équilibres de Nash de la matrice.

    Cours 1.3- Les collections d'objets




    Ex 1

    Notez que pour l'exécution du code suivant, il faut spécifier l'appel au package java.util par l'instruction : package java.util.*;
    Indiquez pour chacune des séries de lignes de code suivantes si elle provoque une erreur. Expliquer pourquoi éventuellement.

    /*liste est un objet de type LinkedList*/
    Integer o=liste.get(liste.size()+1);
    


    /*liste est un objet de type LinkedList*/
    Double o=liste.get(liste.size()+1);
    


    /*liste est un objet de type LinkedList()*/
    Integer o=liste.get(liste.size());
    


    /*liste est un objet de type LinkedList()*/
    Integer o=liste.get(-1);
    


    /*liste est un objet de type LinkedList()*/
    Integer o=liste.get(liste.size()-1);
    




    Ex 2

    a- Proposer une fonction qui prend une LinkedList d'objet de type Integer en paramètre et renvoie la moyenne des valeurs

    b- Proposer une fonction qui prend une LinkedList d'objet de type Double en paramètre et renvoie la moyenne des valeurs




    Ex 3
    Quel affichage donne le code qui suit ?

    HashMap hash=new HashMap();
    Type1 var1=new Type1();
    hash.put(var1,new Integer(5));
    Type1 var2;
    var2=var1;
    boolean b=(hash.get(var1)==hash.get(var2));
    System.out.println(b);
    



    Ex 4
    Soit une liste LinkedList. Quelque soit le type des éléments de la liste, donnez une instruction qui permet de tirer un objet au hasard dans cette liste. Un générateur aléatoire est un objet de type Random, contenu dans le package util. donc, pour tirer un nombre entier au hasard entre 0 et 5 inclus :
    import java.util.*;
    
    public class Test{
    
    public static void main(String[] args)
    	{
    	Random alea=new Random();
    	int n=alea.nextInt(6);
    	}
    }
    

    Cours 1.4- Héritage




    Ex 1
    On suppose avoir deux classes organisées de manière hiérarchique :
    public class A
    {
    	private int i=6;
    	public double y=7;
    	protected String name;
    	
    public A(int n,double x,String str)
    	{
    	i=n;
    	y=x;
    	name=str;
    	}
    
    public int getI(int x)
    	{
    	return i;
    	}
    
    private String concatenation()
    	{
    	return i+""+y+name;
    	}
    
    public String toString()
    	{
    	return "("+concatenation()+")";
    	}
    }
    
    
    public class B extends A
    {
    	public int taille;
    
    public B(int n,double x,String str)
    	{
    	super(n,x,str);
    	}
    
    public String toString()
    	{
    	return super.toString()+taille;
    	}
    
    }
    


    Indiquez quelles sont les méthodes et attributs pouvant être utilisés lors de la manipulation d'une variable de type B.


    Ex 2
    On suppose disposer d'un certain nombre de classes : A, B extends A, C extends A, D extends B, E extends B, F extends C.
    A a; B b; C c; D d; E e; F f;
    
    Parmis les affectations suivantes, dites celles qui sont légales, celles qui ne le sont pas :


    Ex 3
    On suppose avoir trois fichiers, le premier :

    public class A{
    
    public void affiche()
    	{
    	System.out.println("ceci vient de A");
    	}
    }
    


    Le deuxième :

    public class B extends A{
    
    public void affiche()
    	{
    	System.out.println("ceci vient de B");
    	}
    
    public void affiche(int i)
    	{
    	super.affiche();
    	System.out.println("ceci vient de B");
    	System.out.println("valeur de i : "+i);
    	}
    }
    


    Le troisième :

    public class C extends B{
    	
    public void affiche()
    	{
    	System.out.println("ceci vient de C");
    	}
    
    public void affiche(double x)
    	{
    	System.out.println("ceci vient de C");
    	System.out.println("valeur de x : "+x);
    	}
    }
    



    Ex 4
    On dispose de la classe A :
    public class A {
    	int i=9;
    	double x=6;
    	
    public A(int n,double y)
    	{
    	this.i=n;
    	this.x=y;
    	} 
    }
    


    Qu'affiche le code suivant ?
    A varA=new A(7,6);
    System.out.println(varA);
    


    Modifiez la classe A de manière à afficher le couple de valeur i,x avec l'instruction System.out.println(varA);


    Ex 5
    Que va donner le code suivant :

    public class Test
    {
    
    public static void main(String[] args)
    	{
    	Test t=new Test();
    	System.out.println(t instanceof Test);
    	System.out.println(t instanceof Object);
    	System.out.println(null instanceof Test);
    	System.out.println(null instanceof Object);
    	}
    }
    



    Ex 6
    Le code suivant va t'il supporter la compilation (après avoir mis chaque classe dans un fichier bien sur) ? Expliquez, testez puis modifiez éventuellement;

    public class A
    {
    
    public A(int i)
    	{
    	}
    }
    
    public class B extends A
    {
    
    public B(double alpha);
    	{
    	super();
    	}
    }
    



    Ex 7
    Le code suivant va t'il supporter la compilation ? Expliquez
    public abstract class A
    {
    
    public abstract int getCurrentAmont();
    
    public double produit(double a,double b)
    	{
    	return a*b;
    	}
    
    public abstract int getCurrentNumber();
    
    }
    
    
    
    
    public class B extends A
    {
    	int number;
    
    
    
    public int getCurrentNumber()
    	{
    	return number;
    	}
    }
    

    Cours 1.5- Modèle objet java




    Ex 1

    Se convaincre d'avoir compris l'intérêt d'utiliser des wrappers Double Integer plutôt que des types primitifs double, int...

    Expliquer par exemple l'intérêt de proposer une méthode public double moyenne(...){...} au lieu d'une méthode public Double moyenne(...){...}




    Ex 2

    1- Proposer une méhode static qui calcule la moyenne d'un tableau de Double.

    2- Proposer une méthode static qui calcule l'écart type d'un tableau de Double en utilisant la fonction précédente.




    Ex 3

    Proposer un code qui compare les valeurs de deux Double. C'est à dire coder une méthode qui public boolean compare(Double w1, Double w2)

    Expliquer ce que produit la méthode suivante :

    public boolean compare(Double w1,Double w2)
    	{
    	return w1==w2;
    	}
    


    Expliquer ce que produit cette méthode :
    public boolean compare(Double w1,Double w2)
    	{
    	return w1.doubleValue()==w2.doubleValue();
    	}
    




    Ex 4

    Expliquer pourquoi Double, String, Integer sont des classes immédiatement disponibles. En effet, il n'a pas été nécessaire de spécifier import java.lang.*;




    Ex 5

    Soit la fonction :

    public double somme1(double a,int b)
    	{
    	return a+b;
    	}
    
    public double somme2(double a,double b)
    	{
    	return a+b;
    	}
    
    public double somme3(Double a,Integer b)
    	{
    	return a.doubleValue()+b.intvalue();
    	} 
    
    public double somme4(Double a,Double b)
    	{
    	return a.doubleValue()+b.doubleValue();
    	}
    


    Les appels suivants vont ils être acceptés par le compilateur ? Expliquez

    public static void main(String[] args)	
    	{
    	int n=5;
    	double x=0.5;
    	double z=somme2(n,x);/*Appel1*/
    	z=somme1(n,x);/*Appel2*/
    	z=somme1(x,n);/*Appel3*/
    	}
    


    Les appels suivants vont ils être acceptés par le compilateur ? Expliquez

    public static void main(String[] args)	
    	{
    	Integer n=new Integer(5);
    	Double x=new Double(0.5);
    	double z=somme3(x,n);/*Appel4*/
    	z=somme4(x,n);/*Appel5*/
    	}
    
    
    Expliquez pourquoi l'appel 3 est accepté alors que l'appel 5 est rejetté.




    Ex 6

    Les wrappers disposent de fonctions "parse". Ces fonctions renvoient des valeurs numériques à partir de text. Elles sont donc fondamentales, notamment dans la lecture de données depuis des fichiers contenant des caractères. Par exemple, vous pouvez tester le code suivant :

    public static void main(String[] args)
    	{
    	double x=Double.parseDouble("5.4");
    	System.out.println(x);
    	}
    


    Proposez un code qui prend une chaîne de caractères en entrée et un double et renvoie la somme comme une valeur double après avoir parsé la chaine de caractères.