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


Автор: kadet89 4.2.2012, 01:02
Код
class Struct 
{ 
    int num; 
    char symb;
}
Vector<Struct> v = new Vector<Struct>();

вектор содержит 2 типа данных интеджеры и чары. Мне нужно в num занести значение методом add. Несколько часов читал спецификацию и гуглил. Перепробовал кучу вариантов и кроме ошибок компиляции ничего не выходит.
Т.е. Вектор - чтото типо экзэмляра класса через который надо обратиться к num и symb. Пробовал так: v.num и так: v.num.add() - оба способа не работают.

Автор: Mirkes 4.2.2012, 05:29
Цитата(kadet89 @ 4.2.2012,  01:02)
Код
class Struct 
{ 
    int num; 
    char symb;
}
Vector<Struct> v = new Vector<Struct>();

вектор содержит 2 типа данных интеджеры и чары. Мне нужно в num занести значение методом add. Несколько часов читал спецификацию и гуглил. Перепробовал кучу вариантов и кроме ошибок компиляции ничего не выходит.
Т.е. Вектор - чтото типо экзэмляра класса через который надо обратиться к num и symb. Пробовал так: v.num и так: v.num.add() - оба способа не работают.

Предложеное Вами обращение к вектру невено.
Вектор - коллекция объектов (в Вашем случае объектов типа Structure.

я возможно ошибаюсь, но по моему Ваш класс Structure недоопределен.

Скорее всего следовало делать так
Код

public class Struct{
     public int num;
     public char symb;

     public Struct(int aNum, char aChar){
           num=aNum;
           char=aChar;
     }
}

В этом случае мы имеем конструктор класса.

Вектор описан нормально.

Фрагмент добавления записи в вектор
Код

    v.add(new Struct(10,'a'));


Фрагмент чтения значения num из k-й записи вектора
Код

      int n=v.get(k).num;

С char аналогично.

ВАЖНО. Поля num и symb определены у класса Struct а не у вектора.
Вектор хороший аналог массива (но не в коем случае не массив!) и для обращения к одному из элементов надо указать индекс!

Автор: Pawl 4.2.2012, 10:50
Вот так тоже работает:
Код

import java.util.Vector;

public class TestVector {
    class Struct 
    { 
        int num; 
        char symb;
    }
    
    Vector<Struct> v = new Vector<Struct>();
    
    {
        v.add(new Struct());
        v.add(new Struct());
    }
            
    public static void main(String[] args) {
        TestVector tv = new TestVector();
        tv.v.get(0).num = 5;
        tv.v.get(0).symb = 'c';
        tv.v.get(1).num = 3;
        tv.v.get(1).symb = 'b';        
        System.out.println(tv.v.get(0).num);
        System.out.println(tv.v.get(0).symb);
        System.out.println(tv.v.get(1).num);
        System.out.println(tv.v.get(1).symb);        
    }
}
 Правда, это не есть хороший стиль программиртвания smile 

Автор: kadet89 4.2.2012, 15:51
А если у меня не char а массив чаров
public char[] symb = new char[8]
И я хочу добавить в них допустим слово abcd, как это сделать?
Если вместо 'a' указать "abcd" - это уже string. Надо както так { '', '' } или как?

Автор: Pawl 4.2.2012, 17:04
Цитата(kadet89 @  4.2.2012,  15:51 Найти цитируемый пост)
И я хочу добавить в них допустим слово abcd, как это сделать?

Код

public char[] symb = {'a', 'b', 'c', 'd'};

или так
Код

String s = "abcd";
public char[] symb = s.toCharArray();

Автор: kadet89 4.2.2012, 20:32
Код
    public class Struct {
        public int num; public String str1, str2, str3, str4, str5;
        public Struct(int anum, String astr1, String astr2, String astr3, String astr4, String astr5)
        {
            num = anum; str1 = astr1; str2 = astr2; str3 = astr3; str4 = astr4; str5 = astr5;
        }
    }
    Vector<Struct> v = new Vector<Struct>();
    Vector v2 = new Vector ();


Заполняю:
v.add(new Struct(1, "2", "3", "4", "5", "6" ));
        v2.addElement("Title1");
        v2.addElement("Title2");
        v2.addElement("Title3");
        v2.addElement("Title4");
        v2.addElement("Title5");
        v2.addElement("Title6");
Компилится нормально, без ошибок.
Но при попытке заполнить заранее созданную пустую, но рабочую JTable программа перестает запускаться.
Была пустая таличка:
//searchresults = new JTable(22,4);
Сделал так и теперь ничего не работает:
searchresults = new JTable(v,v2);

Проверял v и v2 v.get(0).num  выдает 1, т.е. вроде вектор рабочий
В консоль ничего не пишет, просто выводится что ошибка

Автор: Skynin 4.2.2012, 21:02
Цитата

Но при попытке заполнить заранее созданную пустую, но рабочую JTable программа перестает запускаться.
Была пустая таличка:
//searchresults = new JTable(22,4);
Сделал так и теперь ничего не работает:
searchresults = new JTable(v,v2);

Проверял v и v2 v.get(0).num  выдает 1, т.е. вроде вектор рабочий
В консоль ничего не пишет, просто выводится что ошибка

Описание выдаваемой ошибки нужно приводить.
А также код который вызывает такую ошибку.
Телепаты в природе очень редко встречаются чтобы на них рассчитывать.

Во-вторых JTable работает с моделью TableModel, которую и создает при вызове new JTable(22,4);
А вот что вы передаете new JTable(v,v2); непонятно. Наверное хотите вызвать конструктор:
JTable(Vector rowData, Vector columnNames)
Смотрим в доку, и видим пример как должен быть организован rowData:
((Vector)rowData.elementAt(1)).elementAt(5);
Ваш rowData такой? массив массивов?

и что за проверка - v.get(0).num? JTable ничего знать не знает ни о каких полях "num"

Рекомендую пройти http://docs.oracle.com/javase/tutorial/uiswing/
Или, если сложности с английским - прочесть книжку:
Г. Шилдт "SWING: руководство для начинающих". Есть в инете.



Автор: kadet89 4.2.2012, 21:09
Модератор: Сообщение скрыто.

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