Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Enumeration как получить объект по ключу


Автор: GZep 12.12.2007, 18:09
Здравствуйте.

есть
Код

java.util.Enumeration<java.net.NetworkInterface> nets = java.net.NetworkInterface.getNetworkInterfaces();

как узнать значение по порядковому ключу? например:
Код

System.out.println(java.util.Collections.list(nets).get(0).toString());

Автор: AlexeyVorotnikov 12.12.2007, 18:50
А чем вам не нравится то, что вы сами написали?

Автор: serger 12.12.2007, 18:51
Код

        java.util.Enumeration<java.net.NetworkInterface> nets = java.net.NetworkInterface.getNetworkInterfaces();
        int i = 0;
        while (nets.hasMoreElements())
            System.out.println(""+(i++)+"="+nets.nextElement());

Автор: GZep 12.12.2007, 20:22
AlexeyVorotnikov, не нравится тем, что он не работает)

serger, спасибо, я подозревал, что придется циклом...

Автор: GZep 13.12.2007, 16:03
окончательный вариант (можно обернуть в "метод"):
Код

                    java.util.Enumeration<java.net.NetworkInterface> nets = java.net.NetworkInterface.getNetworkInterfaces();
                    for (int i = 0; (i < ВАШ_КЛЮЧ && nets.hasMoreElements()); i++)
                        nets.nextElement();

                    System.out.println(nets.nextElement());//выводим получившийся результат

если заданный ключ больше количества элементов - выводится последний заданный элемент.

Автор: Kangaroo 13.12.2007, 16:11
GZep, на первый взгляд странный код. На последней строки икспешны не будут валиться? Если например элементов 2, а мы задали ключ 3 и более..

Автор: GZep 14.12.2007, 11:46
нет, там все норм. Это я его так оптимизировал. Если очень долго смареть как он работает - понимаешь, что все норм.

Автор: Kangaroo 14.12.2007, 11:55
GZep, так я потом проверил smile И у меня реально валились икспешны... 
Вот смотри
Код

java.util.Enumeration<java.net.NetworkInterface> nets = java.net.NetworkInterface.getNetworkInterfaces();    
        //допустим элементов 2, мы задали ключ 10
                    for (int i = 0; (i < ВАШ_КЛЮЧ && nets.hasMoreElements()); i++) //из цикла выходим, когда nets.hasMoreElements() == false
                        nets.nextElement();    
                 //но если у нас  nets.hasMoreElements() == false, то что мы тут выводим???
                    System.out.println(nets.nextElement());//выводим получившийся результат

Автор: GZep 17.12.2007, 17:16
Kangaroo, ну, не знаю... у меня этот вариант только без hasMoreElements нормально работает. Это я дописал чтоьы тут сделать универсальный вариант, наверное, где-то ошибся...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)