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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как работать с значениями из коллекции, Vector 
V
    Опции темы
Samotnik
Дата 4.12.2007, 02:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



У меня есть  взятые данные из базы и записанные в коллекции
Код

Vector p = new Vector(10,20,30);
Vector v = new Vector(2,6,6);

Каким образом можно производить операции над коллекциями? Мне нужно  В Vector c  записать значения вычесленные по формуле (x+y)/2 т.е. на моем примере, мне нужно получить коллекцию со следущими значенниями:
Код

Vector с = new Vector((10+2)/2,(20+6)/2,(30+6)/2);

и как результат
Код

Vector с = new Vector(6, 13,18 );


 smile 
PM MAIL   Вверх
AlexeyVorotnikov
Дата 4.12.2007, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Во-первых, у класса Vector нет конструктора с тремя аргументами.
Ну а сами вычисления делаются в цикле. Что-то типа:
Код

for (int i=0; i < p.size(); i++) {
    c.set(i, (p.get(i) + v.get(i))/2);
}



--------------------
RTFM!
Три источника и три составные части Java: The Java Language Specification, Java Platform API Specification, The Java Virtual Machine Specification
PM MAIL   Вверх
Samotnik
Дата 4.12.2007, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



Цитата(AlexeyVorotnikov @  4.12.2007,  08:54 Найти цитируемый пост)
Во-первых, у класса Vector нет конструктора с тремя аргументами.

Эт понятно, я ведь схематично изобразил. У меня векктор заполняется данными взятыми из базы!
За пример спс, нр вся  проблема в том, что он не работает. Пишит:
Цитата

operator + cannot be applied to java.lang.Object, java.lang.Object

Я сам тоже пробывал различными способами делить элементы коллекций, но IDEA выдает одну и ту же ошибку!!   smile 
 
PM MAIL   Вверх
Kangaroo
Дата 4.12.2007, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


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

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



Samotnik, 
используй generics. 

Код

Vector p = new Vector();
p.get(i); //возращает Object


Код

Vector<Integer> p = new Vector<Integer>();
p.get(i); //возращает Integer




--------------------
Lost....
PM MAIL MSN   Вверх
AlexeyVorotnikov
Дата 4.12.2007, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну я тоже схематично написал smile

У вас коллекция типизированная или нет? Т.е. декларируется ли вектор как
Код

Vector<Integer> p;

или просто
Код

Vector p;


В первом случае надо писать
Код

for (int i=0; i < p.size(); i++) {
    c.set(i, (p.get(i).intValue() + v.get(i).intValue())/2);
}

во втором
Код

for (int i=0; i < p.size(); i++) {
    c.set(i, new Integer((((Integer) p.get(i)).intValue() + ((Integer) v.get(i)).intValue())/2));
}



--------------------
RTFM!
Три источника и три составные части Java: The Java Language Specification, Java Platform API Specification, The Java Virtual Machine Specification
PM MAIL   Вверх
Samotnik
Дата 4.12.2007, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



Kangaroo,  пасибо,  запустилось, но выдает Exception 
Цитата

Exception : java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 0
java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 0
    at java.util.Vector.set(Unknown Source)
    at ServerS$1Listener.run(ServerS.java:284)
    at java.lang.Thread.run(Unknown Source)

Вот мой код:
Код

int op, oopr;
                                Vector<Integer> p = new Vector<Integer>();
                                Vector<Integer> v= new Vector<Integer>();
                                Vector<Integer> resu = new Vector<Integer>();
                                Connection con = DriverManager.getConnection(url, "dba", "sql");
                                String stmt_source = "Select OP from KRD";
                                Statement stmt = con.createStatement();
                                rs = stmt.executeQuery(stmt_source);

                                while (rs.next()) {
                                    op = rs.getInt("OP");
                                    p.addElement(op);
                                }
                                System.out.println("Result1 is" + p);

                                stmt_source = "Select OOPR from KRD";
                                rs = stmt.executeQuery(stmt_source);
                                while (rs.next()) {
                                    oopr = rs.getInt("OOPR");
                                    v.addElement(oopr);
                                }
                                System.out.println("Result2 is" + v);
                                
                                for (int i = 0; i < p.size(); i++) {
                                 resu.set(i, (p.get(i) + v.get(i))/2);
                                }
                                System.out.println("Res  "  + resu);
                                con.close();
                            }

Вроде просто все, но не работает....
Пэ.Эс.
Кстати,а что значит это исключение ?

Добавлено через 3 минуты и 13 секунд
AlexeyVorotnikov,  Пасибо, но все равно тот же ексепшн  smile 
Цитата

Exception : java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 0
java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 0
    at java.util.Vector.set(Unknown Source)
    at ServerS$1Listener.run(ServerS.java:282)
    at java.lang.Thread.run(Unknown Source)


Добавлено через 6 минут и 40 секунд
282 строка, это 
Код

resu.set(i, new Integer((((Integer) p.get(i)).intValue() + ((Integer) v.get(i)).intValue())));

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


Эксперт
***


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

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



В переводе это исключение значит "выход индекса за границы". Индекс равен нулю. Это значит, что происходит попытка обращения к нулевому элементу, которого нет. Раз нет нулевого элемента, то рассматриваемый вектор вообще пуст. Поскольку размер вектора p проверяется в цикле, то пуст вектор v.

Выше вижу, что он заполняется в каком-то цикле. Вероятно, этот цикл не выполняется ни разу.
PM MAIL   Вверх
Samotnik
Дата 4.12.2007, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



2 all Спасибо всем!!!  СДЕЛАЛ!!  smile 
Нужно было вместо set()  писать add()
Код

resu.add(i, new Integer((((Integer) p.get(i)).intValue() + ((Integer) v.get(i)).intValue())/2));

И все работает!!
Пэ.Эс.
Вопрос, а почему ???
PM MAIL   Вверх
LSD
Дата 4.12.2007, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Шикарно, у тебя в тексте присутсвует строка:
Код

resu.set(i, (p.get(i) + v.get(i))/2);

а потом ты пишешь, что ошибка в строке:
Код

resu.set(i, new Integer((((Integer) p.get(i)).intValue() + ((Integer) v.get(i)).intValue())));

 smile 



Cудя по всему у тебя какой-то из векторов p  или v пустой. Лучше переписать цикл так:
Код

for (int i = 0; i < p.size() && i < v.size(); i++)
  resu.add((p.get(i) + v.get(i))/2);



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Samotnik
Дата 4.12.2007, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



Цитата(Samotnik @ 4.12.2007,  10:48)
2 all Спасибо всем!!!  СДЕЛАЛ!!  smile 
Нужно было вместо set()  писать add()
Код

resu.add(i, new Integer((((Integer) p.get(i)).intValue() + ((Integer) v.get(i)).intValue())/2));

И все работает!!
Пэ.Эс.
Вопрос, а почему ???

Значит никто не знает ответ на этот вопрос,...   Ну ланна, тогда тему закрываю!!!
PM MAIL   Вверх
Kangaroo
Дата 4.12.2007, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


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

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



Цитата(Samotnik @  4.12.2007,  15:06 Найти цитируемый пост)
Значит никто не знает ответ на этот вопрос,...   

Знаем!
Тебе просто надо было почитать JavaDoc'u и посмотреть код этих методов.
Итак, 
set(int index, E element)
Цитата

Replaces the element at the specified position in this Vector with the specified element.

А вот код:
Код

 public synchronized E set(int index, E element) {
    if (index >= elementCount)
        throw new ArrayIndexOutOfBoundsException(index);
                ....
    }

То есть сначала сверяется текущее количество элементов с индексом который ты суешь методу. 
А если у тебя пустой массив, то какой элемент ты собираешься там заменить???

А add(E o)
Код

Appends the specified element to the end of this Vector.

Добавляет к Вектору, что тебе и нужно было сделать.

Одним словом -  smile   smile 


--------------------
Lost....
PM MAIL MSN   Вверх
Samotnik
Дата 4.12.2007, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



Kangaroo,  ОКИ  СПС  доступно и понятно,  Вобщем  RTFM  smile   
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.0607 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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