2017-10-16 3 views
0

Donc j'ai deux classes on s'appelle bag l'autre s'appelle TestBag. Le but est de demander à l'utilisateur ce qu'il veut: ajouter ou supprimer, et montrer ce qu'il a dans le panier. Je suis un peu nouveau à l'encapsulation, et je ne sais pas comment obtenir l'entrée de l'utilisateur et le mettre dans la méthode add et obtenir cela pour aller à la chaîne de chariot pour montrer ce que l'utilisateur a dans le panier. C'est ce que j'ai jusqu'ici. Je fais la partie d'ajout avant la suppression.Encapsulation Java avec des tableaux

classe sac:

import java.util.Arrays; 

class bag { 
    private String[] cart = new String[5]; 
    private int add; 


    public String[] getcart(){ 
     return Arrays.copyOf(cart, getcart().length); 
    } 

    public int getAdd(){ 
     return add; 
    } 


    public void setAdd(int newValue){ 
     add = newValue; 

    } 

    public void setcart(String [] cart){ 
     cart = cart; 
    } 


} 

TestBag:

import java.util.Scanner; 

public class TestBag { 

    public static void main(String[] args) { 
     bag obj = new bag(); 

     System.out.println("Enter one of the following commands:"); 
     System.out.println("1 - add"); 
     System.out.println("2 - remove"); 
     System.out.println("3 - exit"); 
     Scanner input = new Scanner(System.in); 
     System.out.println(); 
     System.out.println("Enter \"1\", \"2\" or \"3\""); 
     int choice =input.nextInt(); 




     while (choice != 3) { 
      if(choice == 1) { 
       System.out.println("What do you want to add? "); 

       for (int i = 0 ; i < obj.setAdd.length; i++) { 
       obj.setAdd[i] = input.nextInt(); 
       } 
       System.out.println("Here's whats in your cart: "); 
       printArray(obj.getcart()); 


      } 
      else if(choice == 2) { 
       //remove 
      } 
      else if(choice == 3) { 
       //...exit program 
      } 
      else{ 

       System.out.println("Enter \"1\", \"2\", \"3\""); 
       choice = input.nextInt(); 

      } 

     } 
    } 

} 
+3

mieux vaut 'List' que' array', juste une suggestion. – msagala25

+2

1. La classe 'bag' devrait s'appeler' Bag' avec une majuscule B. 2. Ce code ne compile pas - corrige d'abord les erreurs de compilation! Vous pouvez commencer par corriger: 'obj.setAdd.length' qu'avez-vous essayé de faire là? – alfasin

+0

Si vous ne pouvez pas utiliser 'List' /' ArrayList' (comme c'est un devoir), alors vous devez garder une sorte de 'count' pour que vous sachiez pour chaque appel de' add' quel index mettre à la prochaine élément dans le tableau. – markspace

Répondre

0

Merci de partager votre code. En regardant votre classe de sac, vous essayez d'obtenir l'encapsulation des données par dissimulation:

  1. Déclarez les variables d'une classe privée.

  2. Fournir des méthodes de définition et de lecture publiques pour modifier et afficher les valeurs des variables.

Cependant, déclarant les accesseurs de cette façon expose les variables déclarées en tant que privé dans la première étape. Eh bien, les getters sont très bien, car il faut vraiment voir le contenu du panier et le nombre d'articles dans le panier. Les setters ne vont pas bien. C'est comme si vous déclariez vos variables publiques, car vous les autorisez à les modifier à tout moment.

Le principal point d'encapsulation par dissimulation de données est de restreindre l'accès aux variables de la classe aux méthodes sélectionnées. Voici comment je m'y prend:

public class Bag{ 
    //Assuming that the bag has a dynamic size, a list would be appropriate here 
    public List<String> items; 

    public Bag(){ 
     items = new ArrayList<String>(); 
    } 

    //This modifies the contents of the bag. The modification is restricted 
    //through one of the methods (adding an item into the bag) 
    //that are really part of the task. 
    public void add(String item){ 
     items.add(item) 
    } 

    public List<String> getItems(){ 
     return new ArrayList<String>(items); 
    } 

    public int getNumberOfItems(){ 
     return items.size(); 
    } 
}