Преобразование обратной польской записи

В API 21 добавлен фрагмент с закругленными фигурами View .

Просто выполните это:

  • Создайте закругленный (g14) res / drawable / round_outline.xml
    
        
        ...
    
    
    • Настройте выделение в качестве фона вашего ImageView: android:background="@drawable/round_outline"
    • Согласно этой документации , все, что вам нужно сделать, это добавить android:clipToOutline="true"

    К сожалению, есть ошибка и что атрибут XML не распознается. К счастью, мы все еще можем настроить обрезку в Java:

    • В вашей деятельности или фрагменте: ImageView.setClipToOutline(true)

    Вот как это будет выглядеть:

    enter image description here [/g4]

    Примечание:

    Этот метод работает для любой рисующей формы (не только округленной). Он будет обрезать ImageView в любом контуре фигуры, который вы определили в своем Drawable xml.

    Особое примечание о ImageViews

    setClipToOutline() работает только тогда, когда фон View установлен в форму вытяжка. Если эта фоновая форма существует, View рассматривает контур фигуры как границы для целей обрезки и затенения.

    Это означает, что если вы хотите использовать setClipToOutline() для округления углов на ImageView, ваше изображение должно быть задайте с помощью android:src вместо android:background (поскольку фон должен быть установлен на закругленную фигуру). Если вы ДОЛЖНЫ использовать фон для установки изображения вместо src, вы можете использовать это обходное решение:

    • Создайте макет и установите его фон на вашу фигуру.
    • Оберните этот макет вокруг вашего ImageView (без прокладки)
    • Теперь ImageView (включая все остальное в макете) будет отображаться с закругленной формой макета.

8
задан Torsten Marek 28 September 2008 в 21:39
поделиться

6 ответов

Да. Думайте, как работает калькулятор RPN. Теперь, вместо того, чтобы вычислить значение, вместо этого Вы добавляете операцию к дереву. Так, например, 2 3 4 + *, когда Вы добираетесь до +, затем вместо того, чтобы поместить 7 на стек, Вы помещаете (+ 3 4) на стеке. И так же когда Вы добираетесь до * (Ваш стек будет похож 2 (+ 3 4) * на том этапе), это становится (* 2 (+ 3 4)).

Это - префиксная нотация, которую затем необходимо преобразовать в инфикс. Пересеките дерево слева направо, глубина сначала. Для каждого "внутреннего уровня", если приоритет оператора ниже, необходимо будет поместить операцию в скобках. Здесь, затем, Вы скажете, 2 * (3 + 4), потому что + имеет более низкий приоритет, чем *.

Надеюсь, это поможет!

Править: Существует тонкость (кроме не рассмотрения унарных операций в вышеупомянутом): Я принял ассоциируемые слева операторы. Для правоассоциативного (например, **), затем Вы получаете различные результаты для 2 3 4 ** **(** 2 (** 3 4)) по сравнению с 2 3 ** 4 **(** (** 2 3) 4).

При восстановлении инфикса от дерева оба случая показывают, что приоритет не требует заключения в скобки, но в действительности последний случай должен быть заключен в скобки ((2 ** 3) ** 4). Так, для ассоциируемых справа операторов левое ответвление должно быть более высоким приоритетом (вместо более-высокого-или-равного), чтобы не заключать в скобки.

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

15
ответ дан 5 December 2019 в 07:37
поделиться

Алгоритм Сортировочной станции используется для преобразования Инфикса (т.е. алгебраический) к RPN. Это - противоположность того, что Вы хотите.

Можно ли дать мне пример входа RPN? Я - старый пользователь/программист калькулятора HP. Я предполагаю, что у Вас есть стек, содержащий все исходные данные и операторы. Я предположил бы, что необходимо восстановить дерево выражений и затем пересечь дерево для генерации инфиксной формы.

4
ответ дан 5 December 2019 в 07:37
поделиться

C# не имеет встроенной поддержки парсинга Обратной польской записи (RPN).You'll, должен записать Ваш собственный синтаксический анализатор или найти одно онлайн.

Существуют десятки учебных руководств для преобразования постфиксной формы (RPN) для инфиксирования (Алгебраическое Уравнение). Смотрите на это, возможно, Вы найдете это полезным, и можно попытаться 'перепроектировать' его для преобразования постфиксных выражений для инфиксирования формы, имея в виду, что может быть несколько инфиксных нотаций для данной постфиксной. Существует очень немного полезных примеров, которые на самом деле обсуждают постфикс преобразования для инфиксирования. Вот запись с 2 частями, которую я нашел очень полезным. Это также имеет некоторый псевдо код:

2
ответ дан 5 December 2019 в 07:37
поделиться

Если можно считать рубин, Вы найдете некоторые хорошие решения этого здесь

1
ответ дан 5 December 2019 в 07:37
поделиться

Один подход должен взять пример из второй главы книги дракона, которая объясняет, как записать синтаксический анализатор, чтобы преобразовать от инфикса до постфиксной записи и инвертировать его.

0
ответ дан 5 December 2019 в 07:37
поделиться

Если у Вас есть некоторый исходный текст (string/s), что Вы надеетесь преобразовывать из RPN (постфиксная запись) к "нормальной нотации" (инфикс), это, конечно, возможно (и вероятно не слишком трудно).

RPN был разработан для стековых машин, как способ, которым операция была представлена ("2 + 3"-> "2 3 +") соответствие, как это на самом деле выполнялось на аппаратных средствах (продвигают "2" на стек, продвиньте "3" на стек, вытолкайте лучшие два аргумента от стека и добавьте их, пододвиньте обратно на стек).

В основном Вы хотите создать синтаксическое дерево из своего RPN путем создания этих 2 выражений, которыми Вы хотите управлять на "вершинах" и самой операции, которая происходит позже, "родительский узел". Это будет, вероятно, сделано путем рекурсивного рассмотрения входной строки (Вы, вероятно, захотите удостовериться, что подвыражения правильно заключаются в скобки для дополнительной ясности, если они уже не).

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

Еще некоторая информация может быть найдена здесь.

0
ответ дан 5 December 2019 в 07:37
поделиться
Другие вопросы по тегам:

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