Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с Hashtable 
:(
    Опции темы
skalex
Дата 29.9.2004, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хороший человек
**


Профиль
Группа: Участник Клуба
Сообщений: 895
Регистрация: 2.4.2004

Репутация: нет
Всего: 23



Мне необходимо создать структуру вида:
Код
{ husband = { name = John, age = 31 }, wife = { name = Mary, age = 29 } }


Пытаюсь реализовать данную задачу следующим образом:

Код
import java.util.Hashtable;

class MyHash {
   public static void main(String args[]) {
       Hashtable family = new Hashtable();
       family.put("husband", new Hashtable());
       family.get("husband").put("name", new String("John"));
       // etc
   }
}


Данный код не работает. Скажите пожалуйста, в чем моя ошибка? Или может быть в Java есть более удобный способ хранения подобных структур?
PM   Вверх
TrivialCore
Дата 29.9.2004, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 242
Регистрация: 26.4.2004

Репутация: 2
Всего: 5



Есть.
Код
public class NuclearFamily {

class Human {
private String name;
private int age;
public Human(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}

private Human husband;
private Human wife;
public NuclearFamily(/*...*/) {
//...
}

//...

}


PM MAIL   Вверх
skalex
Дата 29.9.2004, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хороший человек
**


Профиль
Группа: Участник Клуба
Сообщений: 895
Регистрация: 2.4.2004

Репутация: нет
Всего: 23



Большое спасибо за информацию. Я мало знаком с Java и возможно мой вопрос окажется глупым...
Но нужно ли мне заранее будет знать количество объектов Human с которыми я буду работать в процессе работы приложения?
Код
private Human husband;
private Human wife;
и.т.д.

PM   Вверх
Gretchen
Дата 29.9.2004, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 25.8.2004
Где: München

Репутация: 1
Всего: 4



Я нисколько не оспариваю предидущее решение, хочу только сказать:

Mace, твой код не работал, потому что функция get возвращает объект типа Object. Для этого объекта нужно делать каст до Hashtable, т.е. писать так

((Hashtable)family.get("husband")).put("name", new String("John"));
PM MAIL ICQ   Вверх
TrivialCore
Дата 29.9.2004, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 242
Регистрация: 26.4.2004

Репутация: 2
Всего: 5



Цитата(Mace @ 29.9.2004, 11:27)
Но нужно ли мне заранее будет знать количество объектов Human с которыми я буду работать в процессе работы приложения?
Нет. Можно сделать, скажем, так:
Код
public class FamilyMember extends Human {

private String role;

public FamilyMember(String role, String name, int age) {
super(name, age);
this.role = role;
}
//...

Код
public class Family {
private ArrayList members; //ArrayList of FamilyMember

public Family(FamilyMember husband, FamilyMember wife) {
members = new ArrayList();
members.add(husband);
members.add(wife);
//...
}

public void addMember(FamilyMember member) {
members.add(member);
}
//.... и т.п., и т.д.

}


PM MAIL   Вверх
skalex
Дата 29.9.2004, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хороший человек
**


Профиль
Группа: Участник Клуба
Сообщений: 895
Регистрация: 2.4.2004

Репутация: нет
Всего: 23



Gretchen , ты оказался прав. Теперь исходный вариант заработал.
PM   Вверх
skalex
Дата 29.9.2004, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хороший человек
**


Профиль
Группа: Участник Клуба
Сообщений: 895
Регистрация: 2.4.2004

Репутация: нет
Всего: 23



В итоге я решил сделать так:

Файл FamilyMember.java:

Код
class FamilyMember {

  String name;
  int age;

  public FamilyMember(String name, int age) {
     this.name = name;
     this.age = age;
  }

  public String getName() {
     return name;
  }

  public int getAge() {
     return age;
  }

}


Файл Family.java:

Код
import java.util.Hashtable;

class Family {

  public static void main(String args[]) {
     Hashtable MyFamily = new Hashtable();
     MyFamily.put("husband", new FamilyMember("John", 31));
     System.out.println(((FamilyMember)MyFamily.get("husband")).getName());
  }

}


Насколько этот вариант рационален?
PM   Вверх
Domestic Cat
Дата 29.9.2004, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Цитата(Mace @ 29.9.2004, 07:53)
Насколько этот вариант рационален?


Зависит от того, как все это предполагается использовать.



--------------------

PM   Вверх
Zandr
Дата 5.10.2004, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 433
Регистрация: 16.7.2004
Где: Новосибирск

Репутация: 9
Всего: 13



Брюс Эккель (Thinking in Java) рекомендует не использовать рудименты типа Vector, Stack, и Hashtable. Вместо Hashtable бери лучше HashMap.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0859 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.