Je résous un exercice dont je pense que je ne suis pas loin de la solution, j'ai donc besoin de quelques éclaircissements s'il vous plaît, voici l'exercice ci-dessous:
La classe VenueOptions est conçue pour stocker les caractéristiques de bars, en modifiant les bits d'un seul chiffre stocké dans la propriété status.
Les caractéristiques qui peuvent être activées ou désactivées sont stockées dans une énumération qui contient les représentations sous forme de nombres entiers des bits correspondants: VenueOptions.option.
L'énumération contient:
- VenueOptions.option.FOOD (1)
- VenueOptions.option.ALCOOL (2)
- VenueOptions.option.MUSIC (4)
En activant ou en désactivant ces bits dans la propriété status, nous pouvons représenter et tester toutes les combinaisons de caractéristiques d'un bar . Lorsque nous parlons d'activer un bit, cela signifie que nous mettons ce bit à 1 et lorsque nous parlons de désactiver un bit, cela signifie que nous mettons ce bit à 0 .
Vous pouvez obtenir la valeur de status avec la méthode statusInt () et la changer avec la méthode setSatusInt () .
Créez la classe VenueOptionsImpl qui descend de la classe VenueOptions , vous devez écrire le code pour les méthodes suivantes:
- setOption (option opt). Pour un opt donné, il active
bit correspondant dans la propriété status.
- unsetOption (option opt) . Pour un opt donné, il désactive le
bit correspondant dans la propriété status.
- optionIsSet (option opt) . Renvoie true si le bit correspondant
à opt est activé, sinon renvoie false.
- supports ( VenueOptions check) .Retourne true si le ou les bits activés dans la propriété status de l'objet VenueOptions , passé en paramètre, sont aussi activés dans l'objet actuel, sinon renvoie false .
Les valeurs des autres bits de l'objet actuel ne sont pas prises en compte. Donc si dans check, seule la valeur FOOD est activée, et dans l'objet actuel, les valeurs FOOD et MUSIC sont activés alors la méthode doit renvoyer true .
- toString (). Renvoie une chaîne qui représente la valeur binaire de la propriété status, comme 111 ou 11 ou 100 .
Voici le code à compléter ci-dessous:
Voici le code que je propose:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 public class ExerciceImpl4 { public void runExercise( String[] argv ) throws Exception { VenueOptionsImpl db = new VenueOptionsImpl(); db.setOption( VenueOptions.option.FOOD ); db.setOption( VenueOptions.option.ALCOHOL ); System.out.println("<pre>"); System.out.println(""+db); if ( db.optionIsSet( VenueOptions.option.ALCOHOL ) ) { System.out.println("ALCOHOL est activé"); } if ( db.optionIsSet( VenueOptions.option.FOOD ) ) { System.out.println("FOOD est activé"); } VenueOptionsImpl support = new VenueOptionsImpl(); support.setOption( VenueOptions.option.FOOD ); support.setOption( VenueOptions.option.ALCOHOL ); if ( db.supports( support ) ) { System.out.println("Propose FOOD and ALCOHOL"); } support.setOption( VenueOptions.option.MUSIC ); if ( ! db.supports( support ) ) { System.out.println("ne propose PAS MUSIC"); } System.out.println("</pre>"); } } abstract class VenueOptions { private int status = 0; public enum option { FOOD ( 1 ), ALCOHOL ( 2 ), MUSIC ( 4 ); public final int num; option( int num ) { this.num = num; } } public int statusInt() { return this.status; } public void setStatusInt( int num ) { this.status = num; } abstract public void setOption( option opt ); abstract public void unsetOption( option opt ); abstract public boolean optionIsSet( option opt ); abstract public boolean supports( VenueOptions check ); abstract public String toString(); } class VenueOptionsImpl extends VenueOptions { / * ---------- DO NOT CHANGE THE CODE ABOVE THIS LINE, IT WILL BE RESET ON RUN ---------- * / / **** Enter your code here **** / / * ---------- DO NOT CHANGE THE CODE BELOW THIS LINE, IT WILL BE RESET WHEN RUNNING ---------- * / }
Les méthodes optionIsSet (option opt) et supports(VenueOptions check) et toString () sont un peu complexes pour moi et je ne suis pas sûr si les codes que j'ai implémentés dans ces méthodes sont corrects? J'ai des doutes, pouvez-vous me donner un coup de main s'il vous plaît?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 class VenueOptionsImpl extends VenueOptions { @Override public void setOption (option opt) { setStatusInt (1); // j'active le bit correspondant dans la propriété status en le modifiant à 1. } @Override public void unsetOption (option opt) { setStatusInt (0); // je désactive le bit correspondant dans la propriété status en le modifiant à 0. } @Override public boolean optionIsSet (option opt) { if (setStatusInt (1)) { return true; } else { return false; } } @Override public boolean supports (VenueOptions check) { return false; }
Partager