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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск объекта по имени атрибута, Поиск объекта по имени атрибута 
:(
    Опции темы
dkirpa
Дата 28.11.2008, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Извиняюсь за простейший вопрос, пониманию что обычно о таких вещах осведомляются в справочниках, 
но так как изучение java я только начал куда обратиться за подсказкой не знаю, так что все же вопрос:

как найти имя объекта по заданному значению его атрибута.

Заодно если несложно может подскажете какой-нибудь справочник толковый.
Спасибо.

PM MAIL   Вверх
Vurn
Дата 28.11.2008, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



(Голосом Волка) Шо??
PM MAIL   Вверх
Connie
Дата 28.11.2008, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



PM MAIL WWW   Вверх
dkirpa
Дата 28.11.2008, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



у меня есть несколько инициализированных объектов, как мне вытащить тот объект(узнать его имя), один из атрибутов которого я знаю?
PM MAIL   Вверх
COVD
Дата 29.11.2008, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



Цитата

у меня есть несколько инициализированных объектов, как мне вытащить тот объект(узнать его имя), один из атрибутов которого я знаю?

Какая-то терминология у вас необычная. Непонятно, что вы спрашиваете. У обьектов нет имен. Имя есть у класса. И есть ссылка (референс) на обьект. При создании обьекта ссылку на обьект можно сохранить и по этой ссылке обьект можно "вытаскивать".

PS Вам учебник надо почитать. Не справочник.

Это сообщение отредактировал(а) COVD - 29.11.2008, 16:21
PM MAIL   Вверх
v2v
Дата 29.11.2008, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 8
Всего: 56



правильно я понимаю задачу: 
у вас инициализированы несколько переменных а1, а2, а3.
каждая переменная является экземпляром одного класса. например Фио.
Вам надо найти ту из переменных у которой аI.name="Name" ?


--------------------
PM   Вверх
dkirpa
Дата 29.11.2008, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



да, Вы поняли меня правильно.

В принципе выход то я нашел, но больно он карявый, при инициализации каждого нового объекта я его записываю в статический массив этого же класса, а потом уже по нему ищу ссылку на необходимый объект по известному мне атрибуту, но не нравится мне это решение, хотелось бы все-таки узнать как это по-человечески сделать можно.
PM MAIL   Вверх
v2v
Дата 30.11.2008, 02:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 8
Всего: 56



действительно карявый и не правильный подход. 
есть несколько альтернативных решений, которые можно тебе предложить,  но подойдут они тебе или нет не известно , так то опиши конкретней задачу , которая стоит перед тобой. для чего тебе ссылку на объект получать по атрибуту? такой ключевой атрибут единственный или их множество?


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


Новичок



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

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



Ну вот к примеру.

В общем, как я уже писал раньше, из ситуации я вышел следующим образом, в класс Игрок я ввел статический массив обьектов Игрок и при инициализации Игрока, я записываю ссылку на этот же объект в статический массив, после чего, записывая игрока в комманду, я произвожу поиск в этом статическом массиве по заданном имени игрока, в последствии записывая его в массив Игроков данной Комманды.

Но как по-мне решение совсем корявое, было бы намного удобнее как-то получить массив инициализированный объектов класса Игрок и потом уже в нем производить поиск по заданному аттрибуту, можно ли это как-либо сделать?

Какие еще есть альтернативные решения?
Если есть еще какие-либо замечания по коду, охотно выслушаю и приму к сведению. 

Код

//класс игрок--------------------------------------------------------------------------------------------------------------------------
public class SoccerPlayer {

    private static SoccerPlayer objectsArray[]=new SoccerPlayer[];
    private String name;
    private String vorname;
    private String team;//variable newTeam braucht man nicht
    private boolean yellowCard;
    private boolean redCard;
    private boolean out;// noch eine variable um festzustellen der Spieler auf dem Felde ist
    private int numberOfGoals;
    private int number;
    
    public SoccerPlayer(String name, String team,  int number){
        
        this.name = name;
        this.number = number;
        this.numberOfGoals = 0;
        this.yellowCard = false;
        this.out = false;
        this.team = team;
        SoccerPlayer.objectsArray[objectsArray.lenght]=this;
        
    }
}


//класс комманда-------------------------------------------------------------------------------------------------------

public class SoccerTeam {
    
    private int number=0;
    static final int QUANTOFPLAYERS = 11;
    private String teamName;
    private String trainer;
    private int numberTable;
    private int goals;
    private int goalsAgainst;
    public SoccerPlayer player[]=new SoccerPlayer[QUANTOFPLAYERS];

    public SoccerTeam(String teamName,String trainer,int numberTable){
        
        this.teamName=teamName;
        this.trainer=trainer;
        this.numberTable=numberTable;
        goalsAgainst=0;
        goals=0;
    }
    public void addPlayer(String name){
        
        if(number<QUANTOFPLAYERS){
            
            player[number]=this.getPlayerObject(name)
            
            if(player[number]!=null)
                number++;
            
            else{
                
                System.out.println("There is no prayer with such name");
                
            }
            
        }
        else{
            
            System.out.println("We do have already 11 players in our team.");
            
        }
        
    }
    private SoccerPlayer getPlayerObject(String name){
        
        for(int i=0;i<SoccerPlayer.objectsArray.length; i++){
            
            if(SoccerPlayer.objectsArray[i]==name){
                
                return SoccerPlayer.objectsArray[i];
                
            }
            
        }
        
        return null;
        
    }
    

}



 
PM MAIL   Вверх
v2v
Дата 3.12.2008, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 8
Всего: 56



Цитата(dkirpa @  3.12.2008,  17:09 Найти цитируемый пост)
 public SoccerPlayer player[]

попробуй воспользоватся HashMap вместо обычного масcива, c ключём name.

будет что то вроде:

Код

Map<String, SoccerPlayer > players = new HashMap<String, SoccerPlayer > ();

...
addPlayer(SoccerPlayer s){
if (players.size() >= 11 ) {
 throw Exception("Сильно много игроков будет");
}
if (players.get(s.name) != null){
 throw Exception("Игрок уже в команде");
}
  players.put(s.name, s);
}
getPlayer(String name)
return players.get(name);






--------------------
PM   Вверх
AxNe0
Дата 3.12.2008, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 24.4.2006
Где: St. Petersburg

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



ну, во-первых, мне кажется, что этот код даже не скомпилируется... 
Код
private SoccerPlayer.objectsArray[]
 не виден из любых других классов. 
Во-вторых, такое сравнение неправильно
Код
SoccerPlayer.objectsArray[i]==name

ибо "==" сравнивает переменные по значению (а для ВСЕХ объектов значение - ссылка на объект, и true в таком случае вернется только если используется на один и тот же объект). Кроме того, получается сравнение теплого с мягким (массив игроков со строкой).
Если надо доставать игрока всегда только по имени, то удобно использовать Map<String, SoccerPlayer>  и его реализацию (HashMap/Hashtable). В этом случае достается игрок получается таким образом:
Код
SoccerPlayer player = map.get(name);



--------------------
SCJP 6, SCBCD 5, OCEWSD 6
blog
PM ICQ Skype   Вверх
dkirpa
Дата 3.12.2008, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Да-да насчет сравнения и видимости понятно вполне, я просто примерчик по-быстренькому набросал что бы просто суть вопроса ясна была, я и сам не компилировал, большое спасибо за ответы, буду изучать, собственно то, что вы написали меня и интересовало.
спасибо 
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.0933 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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