Как удаление последнего элемента, который вводится в компьютер в списке (JAVA)

До сих пор это мой код метода удалять в форме Батарейки.

public void eliminarPila() {
        if (ultimo != null) {
            if (ultimo.siguiente != null) {
                System.out.println("Reproduciendo... " + ultimo.nombreCancion);
                ultimo = primero.siguiente;
            } else {
                System.out.println("Reproduciendo... " + ultimo.nombreCancion);
                ultimo = null;
            }
        } else {
            System.out.println("No existen canciones en la lista... ");
        }
    }
0
задан 21.03.2019, 05:20
2 ответа

Прежде всего, помогать подсказке Мануельк Переса, относительно которой deberГ-схвати бросать беглый взгляд в общие концепции структур данных.

, Если ты позволяешь мне, я делаю пару отражений, на котором ты предлагаешь:

1. - ElecciГіn структуры

, Когда ты будешь манипулировать данными, первым, что ты должен ставить, является quГ© ты сделаешь с этими данными и, в funciГіn этого, выбирать структуру, которая лучше приспосабливает к требованиям проблемы, которые было нужно решать. Из-за примера cГіdigo, что ты поместил, кажется, что ты хочешь манипулировать списком песен производителя. Конечно это что-то, что может делаться с батарейкой, но Вїrealmente ты хочешь сделать это asГ-?

Батарейки - структуры данных, что, независимо от нее implementaciГіn, sГіlo они позволяют тебе соглашаться на информацию, что estГЎ в вершине батарейки и в ningГєn другой. Этот тип структуры информации соответствует со структурой LIFO (last in, first out; Гєltimo во вхождении - первый в том, чтобы выходить). Один из них mГєltiples использования, которые у него есть, состоит в том, чтобы сохранять результат обратных поездок или anГЎlisis sintГЎticos, из-за того, что помещает algГєn пример.

Во-первых, говорить тебе, что Java уже обладает классом типом батарейкой, которая является классом Stack . Поскольку ты можешь видеть, они mГ©todos, что он располагает, они - очень немногие, согласные с функционированием батарейки данных. Важное состоит в том, чтобы ты имел в виду, что батарейка sГіlo может работать с элементом, что estГЎ в вершине батарейки (когда ты будешь думать о батарейке, он думает о том, чтобы сложить в штабели). Фундаментальные операции - push (aГ±adir в вершину из батарейки), pop (извлекать и удалять элемент, что estГЎ в вершине из батарейки), и peek (соглашаться, не удаляя в элемент из вершины из батарейки).

Оставшаяся часть операций сопутствующая в структуру, чтобы знать cuГЎntos элементы есть, и в который глубина или дистанция есть элемент в батарейке. На целесообразности тем, что он осуществляет этих mГ©todos есть дискуссии по этому поводу, но они не приходят в случай.

Возвращаясь в тебя cГіdigo: Нет ничего, что запрещало бы использовать батарейку для списка песен, но Вїrealmente ты хочешь, что список reproducciГіn estГ© в батарейке? ВїQuГ© pasarГ, - если ты хочешь одну reproducciГіn случайная? ВїO reproducciГіn в цикле всего списка? Интуитивно говоря, не кажется, что это структура, которую ты хочешь.

Другие compaГ±eros комментируют структуры FIFO (firs in, first out; первый в том, чтобы входить - первый в том, чтобы выходить), имя которого comГєn - Очередь (он думает об очереди супер, первого, которая прибывает, именно, первого они обслуживают). Операции bГЎsicas очередей, - genГ©ricamente, enqueue (помещать в очереди - в конце концов из очереди-), dequeue (доставать очереди - из начала из очереди-), get (соглашаться, не доставая из очереди - Гєnicamente первого из очереди-), но, снова также не кажется структура, которую ты ищешь, так как у нас есть те же проблемы, что и с батарейкой. Равно как раньше, показывать тебе, что Java уже располагает несколькими классами очереди, использование которой - extensГ-simo внутри нее programaciГіn, упоминая как пример genГ©rico абстрактный класс AbstractQueue , которая то достаточно простая как чтобы делать себе идею об операциях bГЎsicas из очереди. Показывать тебе, что она абстрактная, потому что получает в наследство от AbstractCollection их mГ©todos абстрактные iterator и size , которые tendrГ-схвати, что помогать tГє, что serГЎs та, кто внутри знает cГіmo estГЎ осуществленная класс. Этот класс - хороший пример cГіmo использовать программные средства, которые уже тебе дает Java, и настраивать segГєn твою необходимость.

Думает об обеих структурах как обязательный способ продолжать порядок в ней obtenciГіn данных (LIFO Гі FIFO). Чтобы завивать mГЎs завиток, ты dirГ©, что так батарейка как очередь может быть осуществленной, внутри, как список или как array; dependerГЎ типа поездки, которую ты хотел бы реализовать, если ты хочешь ограничить место, или что вырос неопределенно, и т.д.

Вкратце, список reproducciГіn deberГ, - чтобы позволять произвольный доступ к любому из элементов, но ни одна из двух структур estГЎn сделанные для этого, а следовательно, вероятно, deberГ-схвати переосмысливать использовать батарейку как структуру данных для списка reproducciГіn.

2. - Структура, независимая от данных

Гениальное структур данных состоит в том, что, касательно нее implementaciГіn, они полностью независимые от данных, которых ты хранишь в них. Батарейка может хранить тип данных, которых tГє ты хотел бы, и структура всегда будет давать тот же ответ, с полной независимостью того, что есть внутри.

Я Понимаю, с cГіdigo, который ты присоединяешь, что estГЎs когда пишут один mГ©todo, что старается манипулировать батарейкой данных, однако aГ±ades сообщения, которые связывают данные с поведением батарейки так что, когда ты хочешь удалить элемент батарейки, ты возвращаешь сообщение из-за консоли "воспроизводя...". implementaciГіn cГіdigo eliminarPila должен возвращать и удалять ее элемент вершины батарейки. Абсолютно совсем не mГЎs. Тип элемента, который был бы в батарейке, или то, что ты сделаешь с Г©l, неуместное.

Возможно mГЎs важно, что продумывать структуру данных, которых ты будешь использовать (что в неправильном случае способствует тому, чтобы операции были mГЎs сложно, и они следовательно замедляют ее ejecuciГіn cГіdigo) состоит в том, чтобы ты пересмотрелся cГіmo estГЎs реализовывая cГіdigo.

, Если внутри структуры данных ты входишь informaciГіn на данных, которыми он будет манипулировать estГЎs препятствуя основам programaciГіn mГЎs bГЎsicos. Первый и mГЎs очевидный он та reutilizaciГіn cГіdigo: эта батарейка sГіlo ты valdrГЎ для одной funciГіn очень конкретная, так что, если ты хочешь осуществить другую батарейку в другой части cГіdigo tendrГЎs, что вновь программировать ее снова, с нею pГ©rdida времени и риск совершения ошибок, которые это подразумевает. Если что-то необыкновенное у него есть, POO состоит в том, что, если ты делаешь вещь хорошо, он стоит тебе для многих использований, не изменяя одной sГіla lГ-nea cГіdigo и не sГіlo в tГ - но ты cГіdigo это podrГЎ помогать любой другой программист, который нуждается в том, чтобы решить ту же проблему используя твою структуру. Прямо связанный с этим estГЎ она refactorizaciГіn cГіdigo. Предположи тебе, что в течение разработки твоей программы ты замечаешь, что podrГ-схвати улучшаться cГіdigo твоей батарейки; если удвоил ты cГіdigo 10 раз в твоей программе tendrГЎs, который реализовывать изменения в 10 сайтах программы... снова mГЎs я усиливаю, и mГЎs возможность совершать ошибки. ImagГ-nate, что это, вместо с батарейкой, ты это делаешь с другой структурой или алгоритмом mГЎs сложно. Это происходит обычно, когда препятствуют другому основ programaciГіn mГЎs bГЎsico todavГ - в и имеют общее с фазой diseГ±o (в которой aГєn ты не написал ни одну sГіla lГ-nea cГіdigo): она modularizaciГіn который sГ-ntesis он "дели и vencerГЎs". Проблема подразделяется в проблемах mГЎs pequeГ±os, pequeГ±os так, как было возможно так что каждый soluciГіn он получил одна и sГіlo одну из частей от проблемы, это решил и возвратил ее soluciГіn. Таким образом podrГЎs обнаруживать с mГЎs возможность ошибки (depuraciГіn) и podrГЎs улучшаться cГіdigo много mГЎs fГЎcilmente (refactorizaciГіn). Это два больших демона любого проекта, до точки, что заставили отменять многие из них.

Мы не Знаем оставшуюся часть cГіdigo, но они могут поверните ясно много аспектов, что deberГ-схвати продумывать и учиться mГЎs основательно. Если ты не помещаешь хорошие основы в твои первые проекты следующие ты resultarГЎn почти inabarcables.

Из-за того, что он оставляет одну тебе soluciГіn (есть возможные многие), мой совет:

1. - Если ты действительно будешь создавать список reproducciГіn, используй такой array как основание игры. Он sГіlido и время доступа в каждый элемент унитарное (постоянная команда). Если тебе нужно, чтобы он вырос неопределенно, используй ArrayList . Он mГЎs медленный, когда aГ±ades элементы, которые преодолевают lГ-mite внутреннего array, но sГіlo он происходит каждые некие элементы (amortizaciГіn), но во время соглашения на данные время продолжает быть унитарным.

2. - Если то, что ты действительно хочешь сделать, состоишь в том, чтобы осуществлять собственные ты diseГ±o батарейки или списка: ДЛЯ. PermГ - он боится решительности, но если то, что ты хочешь сделать, состоит в том, чтобы изучать в diseГ±ar батарейку, я рекомендую тебе настоятельно прекращать шифровать cГіdigo и пересматривать основы programaciГіn (programaciГіn расположенная в порядке, сопряжение и cohesiГіn, modularizaciГіn, reutilizaciГіn cГіdigo...) и конечно ты располагаешь в порядке данных bГЎsicas. Чтобы программировать он изучается программируя (как любое умение), но есть вещи, что, как общая концепция, у тебя должны быть яичные белки. Уже buscarГЎs cГіmo он программируется, что serГЎ различный в каждом языке, но концепции структуры, Ваше общее функционирование и Ваши функции bГЎsicas необходимые, чтобы тебе это было ясно посредственно. Я гарантирую тебе, что, с ясным, tГє сам responderГЎs вопрос, который ты выдвигаешь.

Будь что будет то, что estГ©s делая, ты не предоставляешь себе и не расстраивай. ГЃnimo и настаивай и прежде всего, возьми хорошие привычки с первой минуты. Чтобы делать вещи "инакомыслящей" формы всегда есть время (и он может быть достаточно развлекательным). AquГ - мы расположены, одни помогать другим и crГ©eme, чем решаться конкретная проблема, которую ты выдвигаешь, в этом случае, не serГ - на то, чтобы помочь тебе.

Приветствие.

P.D.: Я оставляю тебе пару книг ссылки.
https://pearson.es/espa%C3%B1a/TiendaOnline/c%C3%B3mo-programar-en-java-9ed -
http://pearson.es/espa%C3%B1a/TiendaOnline/piensa-en-java-4ed

0
ответ дан 02.12.2019, 05:21

Первое, что estarГ - в пользу, которую ты приносил, состоит в том, чтобы читать немного ее documentaciГіn Java, что касается обращения списков.

AquГ - оставил тебя documentaciГіn:

Относительно тебя cГіdigo, похоже mГЎs на псевдо-код, что в код java, строго говоря. Так как ты используешь mГ©todos, что не существуют. AdemГЎs, если ты мог предоставлять, что тип объектов они 'последние' и 'следующие', estarГ - в добро.

Для твоего вопроса, если то, что ты хочешь, состоит в том, чтобы удалять Гєltimo, который entrГі, ты мог бы использовать mГ©todo remove, в котором нуждается index объекта, который нужно удалять; в существо Гєltimo, ты используешь mГ©todo size (), что обладают списками в java, и ты отрицаешь у него 1.

SerГ - Во что-то asГ-:

ultimo.remove(ultimo.size()-1);
0
ответ дан 02.12.2019, 05:21
  • 1
    Привет Мануэль, хотя в титуле Maricela он спрашивает из-за списка, в Вашем коде использует Батарейки и как он сказал @gbianchi управляют из-за идеи FIFO (Фирст Ин, Фирст Оут) wikipedia – Capt.Teach 21.03.2019, 11:00
  • 2
    Но есть fos типы батарейки, FIFO и LIFO, сославшись ' последний элемент, что entró в lista' он заставляет меня думать, что это LIFO (Ласт Ин, Фирст Оут), ahí мой solució n. – ManuelC Perez 21.03.2019, 11:04

Теги

Похожие вопросы