2015-10-24 2 views
0
public class Member 
{ 

    private String name; 
    private String alias; 
    public int balance; 

    /** 
    * Constructor for objects of class Member 
    */ 
    public Member(String fullName, String nickname) 
    { 
     this.name = fullName; 
     this.alias = nickname; 
     this.balance = 0; 
    } 
    public void setBalance(int account) 
    { 
     if(account > 0) 
     { 
      balance = balance + account; 
     } 
     else 
     { 
      System.out.println("You have not entered a valid number"); 
     } 
    } 
} 
import java.util.ArrayList; 

public class Lan 
{ 
    private ArrayList<Member> members; 

    public Lan() 
    { 
     members = new ArrayList<Member>(); 
    } 

    public void addMember(Member newMember) 
    { 
     if(balance >= 200) 
     { 
      this.members.add(newMember); 
     } 
     else 
     { 
      System.out.println("You dont have enough money to enter"); 
     } 

    } 
} 

В Member классе я получил баланс, где вы положили в балансе члена «деньги», и в Lan классе, я хочу его что вы можете ввести Lan «добавить член к массиву», если у члена есть баланс = 200. Я не могу сделать поле баланса действующим как следует и импортировать его в класс Lan.Java Bluej класс член/Lan

+0

Не должен 'if (balance> = 200)' be 'if (newMember.balance> = 200)'? – Tom

+0

Спасибо, Том, это сработало! : D – pikkstup

ответ

0

Давайте проверим метод addMember:

public void addMember(Member newMember) 
{ 
    if(balance >= 200) 
    { 
     this.members.add(newMember); 
    } 
    //... 
} 

Здесь вы пытаетесь решить, если newMember должен быть добавлен в список members. Проблема заключается в том, что balance не может быть разрешен, потому что такой переменной нет в классе Lan или в методе addMember.

Это можно легко исправить, потому что вы пытаетесь получить доступ к области, хранящуюся в newMember объекта, так что вы можете изменить

if (balance >= 200) 

в

if (newMember.balance >= 200) 

Таким образом, вы иметь прямой доступ к значение поля balance в объекте newMember.

Обратите внимание, что этот доступ возможен только потому, что модификатор доступа этого поля равен public. Если бы это было private, как и для других полей, вам потребуется геттер, как:

public int getBalance() 
{ 
    return belance; 
} 

и использовать его как это:

if (newMember.getBalance() >= 200) 

Поскольку это всегда хорошая идея использовать encapsulation, лучше установить это поле на private и использовать геттер.

+0

Это действительно полезный человек! ive изменил его на частную и сделал это сейчас. Теперь, если я должен был распечатать, кто находится на Лансе, всех зарегистрированных участников, мне нужно использовать интернатор? и как бы я это сделал? Спасибо за помощь. – pikkstup

+0

Если этот ответ вам помог, тогда не забудьте [accpet] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) его. Чтобы распечатать ваш список, просто переопределите метод 'toString' в' Member' (в Интернете есть много примеров;)), а затем вызывается 'System.out.println (members)'. – Tom