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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Двусвязный список, как то не получаеться 
:(
    Опции темы
DenWPF
Дата 4.9.2010, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



я боюсь что тут не как в C#.
помогите.
Код

TwoList list = new TwoList();
        list.add("qwerty");
        list.add("qwerty123");
        list.add("qwerty321");

Код

public class TwoList
{
    //Размер
    private static int _count=0;
    public static int getCount() {
        return _count;
    }

    //номер порядковый
    int id = -1;
    //просто объект который будет храниться
    private Object _value;
    //элемент предыдущий
    TwoList _previous = null;
    //элемент следущий
    TwoList _next = null;

    // для создания
    public TwoList()
    {
        
    }
//для создания и инцилизации элемента предыдущего
    public TwoList(TwoList previous)
    {
        _previous = previous;
    }
//функция для добавления элемента в конец списка
    public void add(Object value)
    {
        TwoList next = _next;// текущий элемент значение next
        while(true)
        {
            if(next == null)// если следущего нету, значит мы в конце
            {
                setValue(value); // заполняем текущий элемент
                next = new TwoList(this); // создаем следующий(и передаем текущий элемент) и записывает в next
                break;
            }
            next = next._next; // берем следущий элемент и повторяем.
        }
    }
    public void add(int id, Object value)
    {

    }

    public Object getValue() {
        return _value;
    }
    public void setValue(Object value) {
        this._value = value;
    }



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


Новичок



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

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



Вы не устанавливаете указатель на предыдущий элемент списка.
В Java как правило локальные переменные объектов используют черех this.next... (и названия соответственно)
Чему служит переменная count? Она подсчитывает число элементов во всех списках?
Тип Value стоит сделать не Obeject, а через generic-и. Такое решение будет типобезопасным.
Хранить индексный номер в каждом элементе списка нет смысла, так как это лишь создаст огромное количество проблем с его верностью. Съест много памяти и ресурсов, при изменение списка.
PM MAIL   Вверх
DenWPF
Дата 4.9.2010, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



ага понял.

только вот я изменил думал всё ок, но это не так. где то опять что то упустил.

Код

    public void add(Object value)
    {
        TwoList next = _next;
        int co = 0;
        while(true)
        {

            if(next == null)
            {

                this.setValue(value);
                this._next = new TwoList(this);
                System.out.println(co);
                break;
            }
            co++;
            next = next._next;
        }
    }

выводит при трех add 
0
1
1

а  по идее должно 
0
1
2
PM MAIL   Вверх
Ryukzak
Дата 5.9.2010, 01:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код

public void add(Object value) {
    if (_value == null) {
        this.setValue(value);
    } else {
        int co = 0;
        TwoList current = this;
        while (current._next == null) {
            current = current.next;
            co++;
        }
        current._next = new TwoList(current);
        current.setValue(value);
        println(co);
    }
}

Вот так, по идее, должно работать. Ваш код, увы, так до конца и не понял.
PS На работоспособность не проверял.
PM MAIL   Вверх
DenWPF
Дата 5.9.2010, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



твой с ошибкой, но я его модифицировал и получил то что надо.

но потом я решил написать функцию для добавления в любое место, и опять сел  в лужу.

Код

public void add(String value)
    {
         add(_count-1, value, true); // 3 параметр в конец или в другое место добавляется.
    }
    public void add(int id, String value)
    {
         add(id, value, false);
    }
    public void add(int id, String value, Boolean last)
    {
        TwoList current = null;
        if (_value == null)// это при первом заходе
        {
            this.setValue(value);
            this._count++;
            return;
        }
        else
        {
            current = GetElem(id);// достает элемент по номеру
        }
        if(last)
        {
            // если в конец
            _count++;
            TwoList newElem = new TwoList(current);
            newElem.setValue(value);
            current._next = newElem;
        }
        else
        {
            //если в начало, либо другое место
            _count++;
            TwoList PerviousCurrent = current._previous;
            if(PerviousCurrent == null)
            {
                // если это первый элемент
                TwoList ThisElem = this;
                this._next = ThisElem;
                this.setValue(value);
                ThisElem._previous = this;
            }
            else
            {
                // если это любой элемент кроме первого
                TwoList newElem = new TwoList(PerviousCurrent);
                newElem.setValue(value);
                current._previous = newElem;
                newElem._next = current;
            }
        }
    }


 
Код

TwoList list = new TwoList();
        list.add("qwerty");

        list.add("qwerty123");
        list.add("qwerty321");
         list.add("qwerrdthjty321");

       TwoList list23 = new TwoList();
        list23.add("qwerty");

        list23.add("qwerty123");



for(int i=0;i<list.getCount();i++)
         System.out.println(list.GetElem(i).getValue());

        System.out.println();

        list.add(0, "zxcxzcxz");

        for(int i=0;i<list.getCount();i++)
         System.out.println(list.GetElem(i).getValue());


ответ 
Цитата

qwerty
qwerty123
qwerty321
qwerrdthjty321

zxcxzcxz
zxcxzcxz
zxcxzcxz
zxcxzcxz
zxcxzcxz



Это сообщение отредактировал(а) DenWPF - 5.9.2010, 12:19
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.1226 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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