2016-10-07 17 views
-11

私はクラスのArrayListを持つPersonクラスを持っています。 Arraylistの名前はshoppingBagとしましょう。新しいオブジェクトがarraylistに追加されるたびにReduseの整数

学生と食料品はそれぞれフィールドが1つずつあり、int moneyint priceです。 特定の金額と価格は、新しいオブジェクトを初期化するときに決定します。

人が買い物袋に食料品のオブジェクトを追加するたびに、バッグに追加された食料品の合計価格で彼の金額を減らす必要があります。

どうすればよいですか? int型のお金で

class Groceries { 
    private int price; 

    public Groceries(int price) { 
     this.price = price; 
    } 

    public int getPrice() { 
     return price; 
    } 

    @Override 
    public String toString() { 
     return "Groceries{" + 
       "price=" + price + 
       '}'; 
    } 
} 

とクラスの人:

+3

_どうやって?_どうしたの?あなたのコードを教えてください.. –

答えて

1

だから、私の試みは、あなたが

あなたは、価格フィールドを持つクラスの食料品を持っている(私は私のクライアントのために同じことを行うように)したいかを理解するためにしましょう

class Person { 

    private List<Groceries> shoppingBag = new ArrayList<>(); 
    private int money; 

    public Person(int money) { 
     this.money = money; 
    } 

    public List<Groceries> getShoppingBag() { 
     return shoppingBag; 
    } 

    public int getMoney() { 
     return money; 
    } 
} 

は、まずあなたがお金のいくつかの実装でPersonのインスタンスを作成します:食料品のリストとして提出され、ショッピングバッグフィールドPerson person = new Person(150);

買い物袋に食べ物を追加するたびに、person.getShoppingBag().add(new Groceries(10));のように、人物のインスタンスから金額を減らす必要があります。私が正しいだ場合

だから、あなたは、いくつかのことを実装する必要があります。

1)あなたは前に説明した方法とショッピングバッグに食料品を追加することを禁止すべきです。誰かがgetterでListに要素を追加しようとすると、例外をスローする必要があります。直接食料品を追加するメソッドを追加)

public List<Groceries> getShoppingBag() { 
    List<Groceries> bag = ImmutableList.copyOf(shoppingBag); 
    return bag; 
} 

2:グアバを使用して

public List<Groceries> getShoppingBag() { 
    List<Groceries> bag = new UnmodifiableArrayList<>(shoppingBag.toArray(new Groceries[shoppingBag.size()]), shoppingBag.size()); 
    return bag; 
} 

または少しきれいにし、まもなく:それはあなたのリストの変更不可能なコピーを使用して実装することができます。負のバランスを持っていないために全く十分な資金がない場合にも、例外をスローすることができます

public void addToShoppingBag(Groceries groceries) { 

    if (0 > money - groceries.getPrice()) { 
     throw new IllegalStateException("You have not enough money!"); 
    } 

    shoppingBag.add(groceries); 
    money -= groceries.getPrice(); 
} 

3)おそらくあなたは、いくつかのお金を追加する可能性を持っている必要があります。

private void addMoney(int amout) { 
    money += amout; 
} 

完全をご覧くださいデモ例:

class Demo { 

    public static void main(String[] args) throws IOException { 

     Person person = new Person(42); 
     try { 
      System.out.println(person.getMoney()); 
      person.addToShoppingBag(new Groceries(12)); 
      person.addToShoppingBag(new Groceries(20)); 
      person.addToShoppingBag(new Groceries(5)); 
      System.out.println(person.getMoney()); 
      System.out.println(person.getShoppingBag()); 
      person.getShoppingBag().add(new Groceries(1)); 
     } catch (UnsupportedOperationException e) { 
      e.printStackTrace(); 
     } 

     try { 
      person.addToShoppingBag(new Groceries(66)); 
     } catch (IllegalStateException e) { 
      e.printStackTrace(); 
     } 
    } 
} 


class Person { 

    private List<Groceries> shoppingBag = new ArrayList<>(); 
    private int money; 

    public Person(int money) { 
     this.money = money; 
    } 

    public List<Groceries> getShoppingBag() { 
     List<Groceries> bag = ImmutableList.copyOf(shoppingBag); 
     return bag; 
    } 

    public void addToShoppingBag(Groceries groceries) { 

     if (0 > money - groceries.getPrice()) { 
      throw new IllegalStateException("You have not enough money!"); 
     } 

     shoppingBag.add(groceries); 
     money -= groceries.getPrice(); 
    } 

    private void addMoney(int amout) { 
     money += amout; 
    } 

    public int getMoney() { 
     return money; 
    } 
} 

class Groceries { 
    private int price; 

    public Groceries(int price) { 
     this.price = price; 
    } 

    public int getPrice() { 
     return price; 
    } 

    @Override 
    public String toString() { 
     return "Groceries{" + 
       "price=" + price + 
       '}'; 
    } 
} 

PS:次の時間が答えを得るために、コードとデモのいくつかの例を記載してください:)

関連する問題