Oui effectivement il y a une classe papier mais on pouvait faire sans donc j ai essayé car je trouvais la classe papier pas très logique
l' ennonçé:
Exercice 2 : tour de magie2.1 Organisation de l'exerciceDans cet exercice, nous vous demandons d'élaborer un programme orienté objets de manière indépendante pour la première fois. Nousavons donc organisé l'exercice en 2 parties :1. une première (de 2.2 et 2.3) qui décrit le problème à résoudre et qui, idéalement devrait suffire pour élaborer puis écrire leprogramme de façon autonome, certainement en plusieurs tentatives;2. une seconde (partie 2.4), pour aider au cas où la première partie vous semble insuffisante, vu que c'est votre première conceptionautonome d'un programme. Dans un premier temps, essayez de ne pas la lire et revenez-y si nécessaire.2.2 Buts du programmeOn souhaite ici écrire un programme « simulant » le tour de magie élémentaire suivant :Un magicien demande à un spectateur d'écrire sur un papier son âge et la somme qu'il a en poche (moins de 100 francs suisses).L'assistant doit ensuite le lire (sans rien dire), puis effectuer secrètement le calcul suivant : multiplier l'âge par 2, lui ajouter 5, multiplierle résultat par 50, ajouter la somme en poche, et soustraire le nombre de jours que contient une année, puis finalement donner lerésultat à haute voix. En ajoutant mentalement (rapidement !) 115 au chiffre reçu, le magicien trouve tout de suite l'âge et la somme en poche (qui étaientrestés secrets).Modéliser ce tour de magie, en définissant au moins les classes (simples) Magicien, Assistant et Spectateur. Il pourrait égalementêtre utile de disposer d'une classe Papier.L'instance de Spectateur devra demander son âge à l'utilisateur du programme ainsi que la somme d'argent en poche, et s'assurerqu'une valeur correcte est entrée (entre 0 et 99).Essayer de faire une modélisation la plus exacte possible ; faire notamment usage des droits d'accès là où cela semble pertinent. Pourchaque méthode, effectuer un affichage à l'écran de l'opération en cours et de l'acteur qui la réalise.Note :Il existe de nombreuses variantes possibles. Commencer par un modèle très simple, et le faire évoluer pour se rapprocher de lasituation « réelle » décrite.Rappel : pour pouvoir lire une donnée depuis le clavier, il faut avoir au préalable déclaré une variable de type Scanner :private final static Scanner clavier = new Scanner(System.in);...int i = clavier.nextInt(); // par exemple pour lire un entieravec au préalable l'importation import java.util.Scanner en début de programme.Vous pourrez déclarer la variable clavier (ou équivalent) dans la classe Spectateur ici (c'est un point sur lequel nous reviendronsplus tard dans le cours).2.3 Exemple de déroulementSpectateur] (j'entre en scène)Quel âge ai-je ? 35Combien d'argent ai-je en poche (<100) ? 110Combien d'argent ai-je en poche (<100) ? 12[Spectateur] (j'ai un montant qui convient)[Magicien] un petit tour de magie...[Spectateur] (j'écris le papier)[Assistant] (je lis le papier)[Assistant] (je calcule mentalement)[Assistant] J'annonce : 3397 ![Magicien] - hum... je vois que vous êtes agé de 35 ans et que vous avez 12 francs suisses en poche !2.4 Indications plus détailléesVous trouverez sur la page suivante quelques indications en vrac qui peuvent vous être utiles. Ne les lisez pas si vous voulez êtrecomplètement indépendant (but premier de l'exercice)...
j ai remodifier mon code avec charles.lire(papier) suivi de charles .calculer() mais le calcul ne se fait toujours pas.Avant d'exposer mon problème sur le forum ,j 'avais essayer de faire le code sans la classe papier, mais ça ne marchait pas donc j 'ai regarder la solution , mais je ne vois pas ou est le problème par rapport à eux ? et tout seul on bute parfois pour rien
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
| package fr.piter.exo;
import java.util.Scanner;
public class Magie {
public static void main(String[] args) {
Spectateur pierre = new Spectateur() ;
Assistant charles = new Assistant();
Magicien gandalf = new Magicien();
gandalf.tourDeMagie(pierre, charles);
}
}
class Spectateur {
// attributs
static Scanner clavier = new Scanner(System.in);
private int age;
private int argent;
// méthode arrive ou on me demande d ecrire sur un papier mon âge et mon argent
public void arriver() {
System.out.println("[Spectateur] j'entre en scène");
System.out.print("Mon âge ? ");
age = clavier.nextInt();
// je repete la question si la somme est plus grande que 100
do {
System.out.print("Combien j'ai d'argent ? (<=100)? ");
argent = clavier.nextInt();
} while (argent > 100);
System.out.println("[spectateur]j'ai le montant qui convient");
}
public void ecrire() {
System.out.println("[spectateur]J'écris le papier");
}
//je cree ces méthodes pour récuper les variables âge et argent dans les autres classes
public int getAge() {
return this.age;
}
public int getArgent() {
return this.argent;
}
}
class Assistant {
// attributs
private int ageLu;
private int argentLu;
private int resultat;
// il faut une méthode pour calculer le résultat obtenu avec l'âge et l'argent lu sur le papier
public void lire(Spectateur papier) {
System.out.println("[assistant] je lis le papier");
ageLu = papier.getAge();
argentLu =papier.getArgent();
}
public void Calculer() {
System.out.println("[assistant]je calcul mentalement");
resultat = ageLu * 2;
resultat += 5;
resultat *= 50;
resultat += argentLu;
resultat -= 365;
}
// ensuite il faut donner le resultat à voix haute
int direAHauteVoix() {
System.out.println("[assistant] j'annonce " + resultat);
return resultat;
}
}
class Magicien {
private int resultat;
private int ageTrouve;
private int argentTrouve;
// méthode pour calculer l age et l'argent du spectateur
public void calculer(int resul){
resultat = resul;
resultat += 115;
ageTrouve = resultat /100;
argentTrouve = resultat %100;
}
public void tourDeMagie(Spectateur pierre,Assistant charles) {
Spectateur papier = new Spectateur();
pierre.arriver();
System.out.println("un petit tour de magie ");
pierre.ecrire();
charles.lire(papier);
charles.Calculer();
calculer(charles.direAHauteVoix());
annoncer();
}
public void annoncer(){
System.out.println("[Magicien ] hum je vois que vous etes agés de "+ageTrouve+" ans ,et que vous avez "+argentTrouve+ " euros dans les poches");
}
} |
et leur solution avec la méthode papier
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
| import java.util.Scanner;
class Magie
{
// L'histoire générale :
public static void main(String[] args) {
Spectateur thorin = new Spectateur(); // Il était une fois un spectateur...
thorin.arriver(); // ...qui venait voir un spectacle (!!)...
Magicien gandalf = new Magicien(); // ...où un magicien...
Assistant bilbo = new Assistant(); // ...et son assistant...
gandalf.tourDeMagie(bilbo, thorin); // ...lui firent un tour fantastique
}
}
// un bout de papier... pour ce tour de magie
class Papier {
// les données sur le papier
private int age;
private int argent;
// on peut écrire sur le papier
public void ecrire(int unAge, int unMontant) {
age = unAge;
argent = unMontant;
}
// et on peu lire les données depuis le papier
public int lireAge() { return age ; }
public int lireArgent() { return argent; }
}
// --------------------------------------
class Assistant {
/* l'assistant mémorise dans son cerveau les valeurs lues
* et le resultat du calcul.
*/
private int ageLu;
private int argentLu;
private int resultat;
public void lire(Papier billet) {
System.out.println("[Assistant] (je lis le papier)");
ageLu = billet.lireAge();
argentLu = billet.lireArgent();
}
public void calculer() {
System.out.println("[Assistant] (je calcule mentalement)");
resultat = ageLu * 2;
resultat += 5;
resultat *= 50;
resultat += argentLu;
resultat -= 365;
}
public int annoncer() {
System.out.println("[Assistant] J'annonce : " + resultat + " !" );
return resultat;
}
}
// --------------------------------------
class Spectateur {
// pour le moment a prendre comme tel (vu dans le MOOC précédent)
// nous y reviendrons dans ce cours:
private final static Scanner clavier = new Scanner(System.in);
// Les spécificités du spectateur
private int age;
private int argent;
// lorsqu'il entre dans la salle (avant il n'existe pas pour nous)
public void arriver() {
System.out.println("[Spectateur] (j'entre en scène)");
System.out.print("Quel âge ai-je ? ");
age = clavier.nextInt();
do {
System.out.print("Combien d'argent ai-je en poche (<100) ? ");
argent = clavier.nextInt();
} while (argent >= 100);
System.out.println("[Spectateur] (j'ai un montant qui convient)");
}
/* Dans cette modélisation on suppose que le papier
n'appartient à personne : il a été par exemple trouvé
dans la salle de spectacle
*/
// écrit sur un papier
public void ecrire(Papier billet) {
System.out.println("[Spectateur] (j'écris le papier)");
billet.ecrire(age, argent);
}
}
// --------------------------------------
class Magicien {
// ce que le magicien doit deviner:
private int ageDevine;
private int argentDevine;
// pour faire son tour, le magicien a besoin d'au moins
// un spectateur et d'un assistant
public void tourDeMagie(Assistant fidele, Spectateur quidam) {
Papier billet = new Papier();
System.out.println("[Magicien] un petit tour de magie...");
// le magicien donne ses instructions :
quidam.ecrire(billet);
fidele.lire(billet);
fidele.calculer();
calculer(fidele.annoncer());
annoncer();
}
// partie privée ici car seul le magicien sait ce qu'il doit
// faire dans son tour
private void calculer(int resultatRecu) {
resultatRecu += 115;
ageDevine = resultatRecu / 100;
argentDevine = resultatRecu % 100;
}
private void annoncer() {
System.out.println("[Magicien] "
+ " - hum... je vois que vous êtes agé de "
+ ageDevine + " ans ");
System.out.println(" et que vous avez " + argentDevine + " francs suisseen poche !");
}
} |
Partager