Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
z-z
169 / 168 / 56
Регистрация: 22.06.2011
Сообщений: 980
#1

Как суммировать значения строки? - Программирование Android

18.11.2012, 15:18. Просмотров 800. Ответов 4
Метки нет (Все метки)

Здравствуйте. от решил поиграть с андроид. Хочу сделать калькулятор))

сделал кнопки, повесил(вроде бы) слушатель событий, и при нажатии на кнопку в TextView добавляется символ, на который я нажал...


вопрос вот в чем... в итоге в строке будет что то типа 1+1, но как это все суммировать? если я правильно понимаю, это же строка будет, а не цифры и операторы))

Добавлено через 17 секунд
может как то по умнее можно?))

Добавлено через 17 часов 3 минуты
народ, никто не знает, как это осуществить?))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2012, 15:18
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как суммировать значения строки? (Программирование Android):

SQLite вывод максимального значения строки
Добрый день, подскажите как вывести максимальное значение столбца(value_R6)...

Как суммировать значения формы
Добрый день, объясните как реализовать суммирование в аксес 2007. Сделал базу...

Как суммировать значения в таблице
Доброе время суток! У меня база Аксес 2003, есть такая таблица: Месяц ...

Как суммировать значения двух TextBox
Добрый день. Private Sub Command2_Click() Text2A.Text = Val(Text12.Text +...

Как суммировать значения ячеек в dataGridView
Помгите разобраться с datagridview c# ... Как сложть элементы в таблице...

Как суммировать только отфильтрованные значения
Добрый день, Скажите, пожалуйста, как заставить excel считать сумму только...

4
Phantom
Эксперт С++
3168 / 850 / 39
Регистрация: 29.12.2008
Сообщений: 952
18.11.2012, 19:33 #2

Не по теме:

z-z, есть раздел по программированию в Android. Но, думаю, товарищ модератор перенесет туда тему, так что не нужно дублировать, просто запомните на будущее.



Да, действительно, у вас получится строка. Чтобы вычислить её как выражение, нужно её разобрать (процесс называется парсинг) и вычислить.

Рекомендую почитать материалы по теме "Обратная польская нотация" ("Обратная польская запись") и, чуть более широко, "Автоматы", "Конечные автоматы".

Можно поискать готовые решения для Java и прикрутить их к приложению. Не силен в Java, посмотрите в сторону вот этих двух штук. И да пребудет с Вами сила.
http://jeplite.sourceforge.net/
http://www.singularsys.com/jep/index.html
0
m0sk1t
0 / 0 / 0
Регистрация: 18.11.2012
Сообщений: 5
18.11.2012, 19:46 #3
может быть есть смысл посмотреть в сторону Ruby или Python и для GUI - QT
0
z-z
169 / 168 / 56
Регистрация: 22.06.2011
Сообщений: 980
18.11.2012, 20:42  [ТС] #4
Phantom, спасибо)) век живи - век учись... чего только не увидишь))

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

вот код преобразователя:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
 // Метод перевода в обратную польскую нотацию
    private String inPolishNotation(final String formula)
    {
        String rezNotation = ""; // Результирующая запись
        final Stack stack = new Stack(); // Стек
        final Stack outString = new Stack(); // Стек выходной строки
 
        final int point = 0;
        for (int i = 0; i < formula.length(); i++)
        {
            if (formula.charAt(i) == ')')
            {
                while (String.valueOf(stack.peek()).charAt(0) != '(')
                {
                    outString.push(stack.pop()); // Записываем в выходную
                }
                // строку
                stack.pop(); // Удаляем саму скобку
            }
            if (formula.charAt(i) == '(')
            {
                stack.push('(');
            }
            if ((formula.charAt(i) >= 'A') && (formula.charAt(i) <= 'Z'))
            {
                // stack.push(formula.charAt(i));
                outString.push(formula.charAt(i));
            }
            if ((formula.charAt(i) == '+') || (formula.charAt(i) == '-')
                    || (formula.charAt(i) == '/')
                    || (formula.charAt(i) == '*'))
            {
                if (stack.size() == 0)
                {
                    stack.push(formula.charAt(i));
                }
                else
                    if (prior(formula.charAt(i)) > prior(String.valueOf(
                            stack.peek()).charAt(0)))
                    {
                        stack.push(formula.charAt(i));
                    }
                    else
                    {
                        while ((stack.size() != 0)
                                && (prior(String.valueOf(stack.peek())
                                        .charAt(0)) >= prior(formula
                                        .charAt(i))))
                        { // (OPERS!=NULL)&amp;&amp;(PRIOR(OPERS->c)>=PRIOR(a[k]))
                            outString.push(stack.pop());// outstring[point++]=DEL(&amp;OPERS);
                        }
                        stack.push(formula.charAt(i));
                    }
            }
        }
        for (int i1 = 0; i1 < outString.size(); i1++)
        {
            rezNotation = rezNotation + String.valueOf(outString.get(i1));
        }
        return rezNotation;
    }
 
    // Метод получения приоритета операции при формировании обратной польской
    // нотации
    private int prior(final char a)
    {
        switch (a)
        {
            case '*':
                return 3;
            case '/':
                return 3;
            case '-':
                return 2;
            case '+':
                return 2;
            case '(':
                return 1;
        }
        return 0;
    }
вставил этото метод просто в своем коде, и применил вот так:

Java
1
2
3
4
case R.id.bt_res: 
                String a = tablo.getText().toString();
                tablo.setText(inPolishNotation(a));
                break;
там много кнопок "слушается", поэтому всем кодом не стал мусорить))

проблема в чем... не выводятся цифры и знаки не все выводятся, то есть как то так:

inPolishNotation("А+В*С") выводит АВС
inPolishNotation("2+В*3") выводит В
inPolishNotation("++++") выводит +++
inPolishNotation("1+2*3") выводит пустую строку...

как с этим бороться?))

Добавлено через 8 минут
хм, немного разобрался, поправил строку 24 вот так:

Java
1
if ( ((formula.charAt(i) >= 'A') && (formula.charAt(i) <= 'Z')) || ((formula.charAt(i) >= '0') && (formula.charAt(i) <= '9')))
цифры вроде стал читать)) осталось разобраться, как он их считать умеет...))
0
Phantom
18.11.2012, 21:54     Как суммировать значения строки?
  #5

Не по теме:

Цитата Сообщение от m0sk1t Посмотреть сообщение
может быть есть смысл посмотреть в сторону Ruby или Python и для GUI - QT
Это как Вы собрались на Ruby под Android писать?

Ну ладно на Python, через Scripting Layer for Android (естественно, это не Ъ-way и жуткий костыль для настоящих содомитов).

Ну и GUI на Qt - с помощью Necessitas (тогда уж не GUI, а всю программу).

Но на Ruby... Неужели на Ruboto? Разве этот проект не загнулся?
Или Вы хотите присобачить JRuby и JPython? Поясните, пожалуйста.

0
18.11.2012, 21:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2012, 21:54
Привет! Вот еще темы с ответами:

Как суммировать значения ячеек определенного столбца
Дорогие форумчане нужна помощь. Имеется база данных localDB &quot;zpworkers.mdf&quot;, в...

Как суммировать все значения записи через цикл?
Как суммировать все значения записи через цикл, если можно без использование...

Как Суммировать Значения На Основе Выбора Раскрывающихся Списков
Доброго дня всем форумачанам! Подскажите пожалуйста, как реализовать...

Как в реквизит справочника вывести значения из реквизитов других справочников и суммировать?
Всем привет! Такой вопрос. Есть справочник Договор, с реквизитом СуммаДоговора,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru