Correction TP1
On suppose que toutes vos classes sont dans le même package : ici com.mco. A la fin du TP, vous aurez deux classes (donc deux fichiers) :
Main.javaqui contient le programme principal,Dice.javapour le dé
Pour exécuter ce programme chez vous :
- créez un projet intellij comme pour le TP1 et placez le package de base à
com.mco - créez une classe
Dicedans le même package (voir cette partie du cours) - copiez/collez les 2 fichiers.
 - exécutez votre programme.
 
Les classes
On montrera la classe Dice et son utilisation avec la méthode main de la classe Main.
Dice.java
package com.mco; import java.util.Random; public class Dice { private int position; // Méthode générée automatiquement private Random randomGenerator; public Dice(int positionInitiale) { position = positionInitiale; randomGenerator = new Random(); } public Dice() { this(1); } public int getPosition() { // Méthode générée automatiquement return position; } public void setPosition(int position) { // Méthode générée automatiquement this.position = position; } public void roll() { position = randomGenerator.nextInt(6) + 1; } @Override public String toString() { // Méthode générée automatiquement return "Dice{" + "position=" + position + '}'; } @Override public boolean equals(Object o) { // Méthode générée automatiquement if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Dice dice = (Dice) o; return getPosition() == dice.getPosition(); } @Override public int hashCode() { // Méthode générée automatiquement return getPosition(); } }
Spécificités :
- deux constructeurs, celui sans paramètre appelant celui avec un paramètre,
 - le générateur de nombre aléatoire est placé en attribut privé de la classe.
 - les méthodes
getPosition,setPosition,toString,equalsethashcodeont été générées automatiquement. 
Main.java
package com.mco; public class Main { static void testDice() { System.out.println("---- Basic Dice tests ----"); Dice firstDice = new Dice(); System.out.println(firstDice); // position=1 firstDice.setPosition(5); System.out.println(firstDice); // position=5 Dice secondDice = new Dice(firstDice.getPosition()); System.out.println(firstDice == secondDice); // false System.out.println(firstDice.equals(secondDice)); // true firstDice.setPosition(2); System.out.println(firstDice.equals(secondDice)); // false } static void testRandom() { System.out.println("---- Random tests ----"); final int NUMBER_TRIES = 100; int numberOf1 = 0; Dice dice = new Dice(); for (int i=0; i < NUMBER_TRIES; i+=1 ) { dice.roll(); if (dice.getPosition() == 1) { numberOf1 += 1; } } System.out.println("Number of 1: " + numberOf1 + "/" + NUMBER_TRIES); // 100 / 6 ~= 17 System.out.println("Probability: " + (float)numberOf1 / NUMBER_TRIES); // 1 / 6 ~= 1.167 } public static void main(String[] args) { testDice(); testRandom(); } }
Spécificités :
- des commentaires pour vérifier que les réponses sont correctes.
 - utilisation de méthodes statiques dans la classe Main pour rendre la lecture plus aisée,
 - mot clé
finalpour les constantes - on caste un entier en réel (
float) pour que la division soit réelle et non entière.