2010-10-19 37 views
2

J'ai quelques questions à propos de java. Il y a deux questions dans le code (je les ai laissées comme commentaires). Aussi, quel est le but de l'utilisation de méthodes set et getting? Pourriez-vous l'expliquer très brièvement, s'il vous plaît? Je suis un débutant. Merci :)Java setter, getter (lancer un dé)

public class Die 
{ 
    private final int MAX = 6; 
    private int faceValue; 

    public Die() 
    { 
     faceValue = 1; 

     //why do you set the faceValue as 1? 
    } 

    public int roll() 
    { 
     faceValue = (int)(Math.random() * MAX) + 1; 
     //Why do we use MAX instead of just number 6? 

     return faceValue; 
    } 

    public void setFaceValue (int value) 
    { 
     if (value > 0 && value <= MAX) 
     faceValue = value; 
    } 

    public int getFaceValue() 
    { 
     return faceValue; 
    } 

    public String toString() 
    { 
     String result = Integer.toString(faceValue); 
     return result; 
    } 
} 
+0

Veuillez formater votre code correctement la prochaine fois.Utilisez l'aperçu en bas pour vous assurer que tout va bien. – EboMike

+4

Désolé pour le mauvais formatage. Je vais m'assurer que je code correctement. et merci à tous pour votre aide. Toutes vos réponses sont très utiles! –

Répondre

3

d'abord, vous devez utiliser la balise exemple de code c'est bien laid lire comme ça. L'utilisation de méthodes getter/setter empêchera l'accès direct à une variable d'instance. Ceci est également appelé le masquage ou l'encapsulation de données. Comme pour vos questions, la faceValue est initialisée avec la valeur 1, vous faites normalement des choses init dans le constructeur. La deuxième question Math.random va générer un nombre entre 0-1 que vous multipliez par 6 qui se traduit par un nombre entre 0 et 5. Donc vous ajoutez +1 pour avoir la gamme de 1-6.

1

Réglage faceValue est l'attribution d'un jet de dé raisonnable lors de l'initialisation, sans dépendre d'un appel à roll(). En utilisant MAX au lieu de 6, il est plus facile de changer la taille de la matrice - par exemple, beaucoup d'autres jeux utilisent différentes tailles de matrices et peut-être que vous voulez leur porter ce code.

En note, la mise en forme dans le code de question pourrait utiliser un peu de travail pour améliorer la lisibilité.

1
//why do you set the faceValue as 1? 

En Java, les entiers sont mis à 0 par défaut, mais dans les matrices il n'y a pas de visage à la valeur 0. MAX est utilisé, de sorte que chaque fois que vous voulez mettre à jour la valeur de MAX, vous le mettez à jour en un seul endroit. Et il sera mis à jour où vous l'avez utilisé. De cette façon, il devient facile de maintenir et de s'adapter aux changements.

2

Vous utilisez une constante ("MAX") car vous pouvez parfois vouloir changer la valeur, par exemple si vous voulez lancer un dé à vingt faces. Dans ce cas, vous n'avez qu'à modifier le code en une ligne, ce qui facilite la maintenance. Cela n'a pas beaucoup de sens dans ce type de programme simple, mais dans des projets plus complexes, vous voulez utiliser des constantes pour changer rapidement certaines valeurs (fixes) sans vérifier chaque ligne.

méthodes getter et setter sont utilisées dans la programmation orientée objet pour maintenir les variables encapsulées et fournir une interface pour rendre les accessable variables par d'autres classes

1

Donc, c'est ce que nous appelons une classe de données cela signifie que cette classe est utilisée pour représenter les données qui sont envoyées autour de votre programme dans ce cas, ses données pour le dé. Les Getters/Setters si vous le faites correctement vous permettent d'accéder à ces données et de changer les valeurs, créer des classes de données est utile pour créer des multiples, donc si vous venez de déclarer ces variables dans la classe principale, pour créer plusieurs matrices de cette façon bien que vous puissiez créer plusieurs instances de die. Dans la mesure où la valeur frontale est 1, je suppose que c'est parce que la valeur d'un dé réel n'est jamais égale à 0. Par conséquent, la valeur 1 est la valeur par défaut avant le jet. il pourrait être n'importe quelle valeur vraiment car ils ont tous des probabilités similaires. Vous utilisez max car il va toujours être 6 et de cette façon il ne peut pas être modifié par d'autres méthodes par erreur. espoir qui aide +1 Bonne question pour les débutants Merci Chris

1

simplement

// pourquoi définissez-vous la faceValue comme 1?

parce que la valeur par défaut serait 0.Il n'est pas souhaitable dans votre logique.

// Pourquoi utilisons-nous MAX au lieu de seulement numéro 6?

Il est toujours préférable d'utiliser des valeurs constantes comme champ public static final

2

Q: Pourquoi utiliser des accesseurs? R: En les utilisant conjointement avec des variables d'instance privées, vous pouvez définir exactement comment la valeur d'un champ doit être modifiée. Cela peut devenir fastidieux parce que la plupart du temps, les getters et setters vont juste obtenir/définir la valeur sans aucun contrôle ou effets secondaires. Mais même ici dans votre code, vous voyez comment le setter de faceValue vérifie si la valeur donnée est entre 0 et le MAX. Ceci garantit que quand quelqu'un, y compris vous-même, veut changer faceValue, l'entrée sera vérifiée.

Cela s'appelle l'encapsulation, où vous masquez les champs d'une classe à partir de tout ce qui se trouve en dehors de cette classe et définissez des moyens très spécifiques pour changer et obtenir ces champs.

Q: Pourquoi définir faceValue à 1? R: Cela initialise simplement faceValue à 1. Donc, si vous appelez getValue sans lancer d'abord le dé, il retournera toujours 1. Il peut être tout ce que vous voulez.

Q: Pourquoi utiliser MAX? R: C'est une très bonne habitude de programmation d'utiliser des constantes pour n'importe quelle constante dans votre code. Tout d'abord, il facilite la lecture du code. Si je lisais votre code et que je voyais value <= 6, je serais confus au sujet de ce que 6 est réellement. Si j'ai vu quelque chose comme DICE_MAX_VALUE, alors je sais exactement ce que vous étiez en train de vérifier. Deuxièmement, peut-être plus important encore, l'utilisation de constantes vous permet de le définir une fois et l'utiliser n'importe où et être garanti d'avoir la même valeur. Si jamais vous vouliez changer cela en un dé de 20 faces, vous deviez entrer dans votre code et changer toutes les instances de '6' en '20', ce qui peut être ennuyeux, prendre du temps et causer des erreurs.

1

Cet exemple est directement tiré d'un manuel que j'ai utilisé à l'université. Êtes-vous dans le programme ITM de Ryerson?

Rappelez-vous qu'un die physique roulera quoi que ce soit entre 1 et 6. Considérez ce qui suit:

public class Monopoly 
{ 
    public static void main(String[] args) 
    { 
    Die myDie = new Die(); 
    System.out.println(myDie.getFaceValue()); 
    } 
} 

Que pensez-vous qui se passerait si votre constructeur n'a pas été initialisé facevalue? L'utilisation de MAX au lieu de 6 a plus à voir avec la lisibilité du code. Dans un grand programme, vous pourriez mettre 6 partout. Ce serait bien pour vous parce que vous l'avez écrit, mais le développeur qui vient vous remplacer dans deux ans verrait ces 6 partout et peut ne pas comprendre pourquoi vous avez utilisé le numéro 6. En utilisant une constante (MAX) et en utilisant ce mot, vous ajoutez plus de contexte à ce qui se passe. Deuxièmement, si les règles du jeu changent pour utiliser un dé qui va de 1 à 8, il est plus facile de mettre à jour MAX = 8 dans une zone, par opposition à changer de 6 à 8 partout.