Чем это называют в информатике?

К сожалению, в этой программе слишком много ошибок, чтобы сделать это простым исправлением. Вам действительно нужно уменьшить свою программу и поработать над тем, чтобы сделать ее максимально простой. Ваша программа намного больше, чем нужно.

Вы не можете иметь два открытых класса в одном файле. Ваш класс "GroceryPackage", кажется, не предоставляет ничего, что вы не можете сделать с помощью методов вашей переменной ArrayList "listofGrocery", кроме отслеживания цен (что он не делает). Это излишне усложняет программу.

Вы можете просто удалить его «публичное» ключевое слово или сделать его закрытым или статическим внутренним классом Main. Однако я бы предложил просто избавиться от этого. Я действительно не думаю, что вам это нужно.

Технически, вы еще не достигли шага 2. Ничто не мешает дублировать значения в вашем ArrayList. Я бы использовал HashMap вместо этого. Это позволит вам хранить «продукты» в виде строк, а их цены - в виде двойных значений.

Вы можете использовать методы «getter» и «setter» в GroceryPackage для получения, изменения и возврата вашего ArrayList, получения переменной напрямую с помощью GroceryPackage.listofGrocery (listofGrocery не будет работать с этим, если переменная является закрытой), или просто сделайте это атрибутом вашего основного класса. Последний самый простой вариант.

Я заметил, что вы никогда не инициализировали переменную listofGrocery как атрибут GroceryPackage.

Стилистически «listofGrocery» должен быть «listOfGrocery».

Вы не используете атрибут "grocery1" в GroceryList.

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

Либо переберите все значения в структуре данных, либо используйте структуру данных, которая выдает исключение или возвращает предсказуемое значение, если добавляемое значение имеет дубликат внутри. Убедитесь, что независимо от того, что вы делаете, вы не заменяете значения, которые уже находятся внутри структуры данных.

Чтобы решить третий шаг, «пользователи должны иметь возможность удалить продуктовый продукт с указанным именем».

Вы пытаетесь дать свой метод «removeGrocery ()» аргумент, даже если это не займет ничего. Кроме того, метод clear () удаляет все значения во всем ArrayList. Внимательно рассмотрите методы, доступные для любой структуры данных, которую вы выберете.

На четвертом шаге «пользователи должны иметь возможность видеть все содержимое корзины».

Выполнять итерацию по всему содержимому корзины.

Подводя итог.

Я в основном избегал давать вам прямые ответы на вопросы вашей программы. Тем не менее, надеюсь, вы можете взять то, что я сказал, и понять, где вы ошиблись. На самом деле существуют тысячи различных способов заставить вашу программу соответствовать требованиям. Обязательно внимательно прочитайте javadocs онлайн. Они бесценны . Наконец, я заметил, что вы никогда не используете циклы в своей программе. Это лучший друг начинающего программиста. Научитесь любить их.

7
задан 9 revs, 2 users 100% 19 October 2008 в 13:33
поделиться

17 ответов

Это называют "поздним связыванием", "динамическим связыванием", или "привязкой времени выполнения". То, что это связывает строкой, является просто деталью реализации, хотя это действительно подразумевает, что отображение строки к символу существует во времени выполнения (который некоторые языки, как C++, не обеспечивают).

"Самоанализ" или "отражение", с другой стороны, относятся к способности узнать, какие интерфейсы, методы, или приписывает объект реализации во времени выполнения.

Это верно, что динамично ограниченные символы не могут быть проверены перед выполнением; это - то, что делает их отличающимися от статически ограниченных символов.

15
ответ дан 6 December 2019 в 05:01
поделиться

Первым примером является пример того, как namespaced xml может принять значения при компиляции времени, второй является оба инжекция привязки данных/зависимости, третьим примером является Отражение, если я должен был отметить все это 3 примера с именем, я думаю, что пойду для "Синтаксиса"

0
ответ дан 6 December 2019 в 05:01
поделиться

Пример Java, который Вы дали, называют Динамической Загрузкой Класса. Я не уверен, является ли другими примерами то же самое. Но это полезно в отражении. Возможно, Вы ищете шаблон разработки под названием Инверсия управления.

0
ответ дан 6 December 2019 в 05:01
поделиться

В мире.NET мы называем эту привязку данных, и она обработала отражение использования.

Это также напоминает мне сильно внедрения зависимости.

0
ответ дан 6 December 2019 в 05:01
поделиться

Запахи как указатель функции мне.

0
ответ дан 6 December 2019 в 05:01
поделиться
1
ответ дан 6 December 2019 в 05:01
поделиться

Если тип переменной не известен до времени выполнения, то это - позднее связывание. Если тип переменной известен во время компиляции, то это - раннее связывание.

Intellisense, завершение кода и все другие функции IDE, о которых Вы говорите, только доступны на ранних связанных переменных.

1
ответ дан 6 December 2019 в 05:01
поделиться

Существует сценарий, где компилятор может помочь этому... Генерация кода.

1
ответ дан 6 December 2019 в 05:01
поделиться

"самоанализ"?

1
ответ дан 6 December 2019 в 05:01
поделиться

Я думаю, что примером Flex не является вполне то же как то в Java (не знайте другой материал). Пример Java - ясно что-то, что я назвал бы поздним связыванием, потому что загрузчик класса разрешает имя класса во времени выполнения, последнее время, чтобы сделать это.

Flex MXML является главным образом другим синтаксисом, который в конечном счете компилируется во что-то, Вы, возможно, также записали в ActionScript. Насколько я могу сказать, mx:Button и selectAll (), функция разрешена во время компиляции. По крайней мере, mxmlc дает ошибки при использовании неопределенного символа там.

1
ответ дан 6 December 2019 в 05:01
поделиться

Позднее связывание?

2
ответ дан 6 December 2019 в 05:01
поделиться

Вторыми и третьими примерами являются примеры отражательного или позднего связывания, но первый пример не.

<mx:Button click="selectAll()" label="Select All"/>

Переписывается как ActionScript перед компиляцией, с selectAll() часть подвернута в функции обработчика событий. Что-то вроде этого (то, как это сделано точно, может быть проверено путем добавления -keep-generated-actionscript к флагам компилятора):

_button1 = new Button();
_button1.label = "Select All";
_button1.addEventListener("click", function( event : Event ) : void {
    selectAll();
});

Компилятор определяет, являются ли атрибуты событиями, стилями или свойствами, но так как это сделано во время компиляции, это не отражение. Отражение, по определению, сделано во времени выполнения.

Я думаю, что можно было утверждать, что вторыми и третьими примерами является отражение, но также и что они - примеры позднего связывания. Ни один из них на самом деле не определяет возможности объектов, они продолжают работать, так таким образом они не отражение. Однако я сказал бы, что термин "отражение" очень часто используется в широком смысле означать что-либо, что называет методы, имена которых определяются во времени выполнения, или создает объекты из классов, названных только во времени выполнения. Если Вы хотите быть точным "поздним связыванием", вероятно, самый корректный ответ, но я думаю, что "отражение" достаточно хорошо.

2
ответ дан 6 December 2019 в 05:01
поделиться

Вещь гибкого провода можно назвать как позднее связывание, если это работает как нормальный HTML. Пока пользователь не нажимает кнопку, время выполнения не потрудилось находить, существует ли функция или нет. Второй вещью является внедрение зависимости, которое включает указатели функции (посредством Интерфейсов) и отражение. Java каждый - определенно отражение.

Я думаю, можете быть Вы, не смогли к слову Ваш вопрос правильно или выбрал плохие примеры для иллюстрирования мысли.

3
ответ дан 6 December 2019 в 05:01
поделиться

Отражение

3
ответ дан 6 December 2019 в 05:01
поделиться

Что заставляет Вас думать это Class.forName разве отражение не?

3
ответ дан 6 December 2019 в 05:01
поделиться

Между прочим, я предполагаю, что код Flex Вы показали нам использование просто вызов ActionScript, в этом случае click атрибут просто был бы eval'd интерпретатором документа Flex. Таким образом нет никакого специального волшебства позади этого вида кода, он просто вводится для интерпретатора.

1
ответ дан 6 December 2019 в 05:01
поделиться

Позднее связывание

7
ответ дан 6 December 2019 в 05:01
поделиться
Другие вопросы по тегам:

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