2015-11-15 2 views
1

Я хочу попробовать простую реализацию телефонной книги с arraylist в java. Сначала я создал класс, содержащий информацию. необходимо и второе, я хочу иметь еще один класс, который имеет методы получения информации и печати.телефонная книга с arraylist в java

и потому, что я хочу использовать список массивов, это то, что я сделал до сих пор, но метод «print» продолжает давать мне ошибку в цикле, есть ли кто-нибудь, кто может помочь мне оптимизировать мой код и почему у меня эта ошибка.

это первый класс:

public class PhoneBook { 
long number; 
String name; 
. 
. 
. 
. 

getter() and setter(); 
} 

Второй класс с методами:

public class PhoneBookMethods { 

ArrayList<PhoneBook> phoneBooks = new ArrayList<PhoneBook>(); 

public void getInfo(PhoneBook phoneBooks) 
{ 

. 
. 
. 
} 
public void print(PhoneBook phoneBooks) 
{ 
    for (PhoneBook p: phoneBooks) {// this is where I got the error 
//foreach not applicable to type 'PhoneBook' 
     System.out.print(p.getName()); 
     .... 
    } 
} 

}

+0

PhoneBookMethods следует назвать PhoneBook и PhoneBook следует назвать PhoneBookEntry. – laune

ответ

2

в вашем наличии для каждого цикла, изменение

for (PhoneBook p: phoneBooks) 

в

for (PhoneBook p: this.phoneBooks) 

так, что вы будете получить доступ к phoneBooks ArrayList, а не аргумент метода print.

EDIT:

Вы можете использовать "это" ключевое слово, чтобы сделать ваш код намного более "явным". Например, в вашем случае у вас есть аргумент phoneBooks, который имеет то же имя, что и ваш ArrayList (переменная-член). Чтобы явно различать два из них, используйте this.phonebooks для доступа к переменной-члену phoneBooks (ArrayList) и используйте phoneBooks для ссылки на аргумент.

+0

... аргумент метода 'print', который бесполезен и должен быть опущен. – laune

+0

Вы правы. Это не имеет смысла в деле. –

+0

Спасибо, ребята, я просто смущен тем, что «это» помогает мне получить доступ к «администратору телефонной книги», может быть, я немного смущен значением «это» здесь, я знаю об использовании этого в других местах, но здесь Я не использовал его с массивом, не могли бы вы описать его немного. –

0

общественных недействительные печати (PHONEBOOK записных книжки)

Ваших параметра записных книжки маска поле (массив) также называется phoneBooks. Поэтому компилятор пытается обрабатывать параметр как список и ошибки.

1

Если вы хотите использовать переменную экземпляра phoneBooks, тогда вам не нужно передавать какой-либо параметр в метод print().

public void print() 
{ 
    for (PhoneBook p: phoneBooks) {// this is where I got the error 
//foreach not applicable to type 'PhoneBook' 
     System.out.print(p.getName()); 
     .... 
    } 
} 

ИЛИ если вы действительно хотите передать пары переименовать пары

public void print(ArrayList<PhoneBook> phoneBookList) 
{ 
    for (PhoneBook p: phoneBookList) {// this is where I got the error 
//foreach not applicable to type 'PhoneBook' 
     System.out.print(p.getName()); 
     .... 
    } 
} 
+0

Если печать является правильным методом, она должна работать на поле, то есть вторая версия не подходит. Это может быть как статический метод, а затем тип параметра должен быть Collection, а не ArrayList. – laune

0

На самом деле у первого у вас есть какие-то проблемы проектирования. То, как вы думаете, что такое PhoneBook, недействительно. Вы должны рассмотреть, что в телефонной книге есть несколько телефонов. Таким образом, вы можете иметь класс телефона, как показано ниже:

public class Phone { 

    private String number; 
    private String name; 

    public String getNumber() { 
     return number; 
    } 

    public void setNumber(String number) { 
     this.number = number; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

} 

и класс телефонной книги, ответственного за проведение этих объектов телефон:

public class PhoneBook extends ArrayList<Phone> { 

    @Override 
    public String toString() { 
     StringBuilder stringBuilder = new StringBuilder(); 

     for (Phone phone : this) { 
      stringBuilder.append("----------------------------\n"); 
      stringBuilder.append("Name:" + phone.getName() + "\n"); 
      stringBuilder.append("Number:" + phone.getNumber() + "\n"); 
     } 

     return stringBuilder.toString(); 
    } 

} 

Это ArrayList из телефона, больше ничего. Таким образом, вы можете добавить или удалить телефон напрямую через телефонную книгу.Это, как использовать его:

public class MAIN { 

    public static void main(String[] args) { 
     Phone myPhone = new Phone(); 
     myPhone.setName("Eray"); 
     myPhone.setNumber("0533XXXXXXX"); 

     Phone girlfriendPhone = new Phone(); 
     girlfriendPhone.setName("Canan"); 
     girlfriendPhone.setNumber("0544XXXXXXX"); 

     Phone yourPhone = new Phone(); 
     yourPhone.setName("Bita Mirshafiee"); 
     yourPhone.setNumber("0599XXXXXXX"); 


     PhoneBook phoneBook = new PhoneBook(); 
     phoneBook.add(myPhone); 
     phoneBook.add(girlfriendPhone); 
     phoneBook.add(yourPhone); 

     System.out.println(phoneBook); 
    } 

} 

Наконец, это выход:

---------------------------- 
Name:Eray 
Number:0533XXXXXXX 
---------------------------- 
Name:Canan 
Number:0544XXXXXXX 
---------------------------- 
Name:Bita Mirshafiee 
Number:0599XXXXXXX 
+0

Хороший ответ, но слишком сложный для простого решения ;-) – TungstenX

+0

Спасибо, вы на самом деле решаете проблему. Это было хорошо, потому что это напоминает мне некоторые методы и что, расширяя его, будет намного проще. –