Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.82/17: Рейтинг темы: голосов - 17, средняя оценка - 4.82
Опа!!
16 / 16 / 1
Регистрация: 30.09.2009
Сообщений: 89
#1

textView как "экран" программы-калькулятора

09.08.2011, 13:21. Просмотров 3083. Ответов 8
Метки нет (Все метки)

День добрый. Есть компонент textView, он используется для ввода цифр в программе-калькуляторе. Простая задача оказалась для меня нерешаемой - взять значение из textView, перевести его в double, умножить\сложить\разделить на другое, преобразовать и положить обратно в textView

Java
1
2
3
4
5
double value = Double.parseDouble(cBuf.toString());
double result = Double.parseDouble(tv.getText().toString());
result += value;
                
tv.setText((CharSequence)String.valueOf(result));
вроде бы все логично и верно, но приложение вылетает с Force Close

пробовал массу других вариантов преобразований - желаемого результата так и не получил. Подскажите, где я не прав? Еще раз напомню - взять значение из textView (там могут быть либо цифры либо цифра.цифра), преобразовать его в числовой формат (double), умножить (сложить, вычесть и т.д.) на другое значение (в моем случае оно тоже преобразовывается в числофой формат все из того же CharSequence, возвращаемого getText()) и положить результат операции обратно в textView через .setText()

Добавлено через 2 минуты
.. более того, вылетает даже с int:

Java
1
2
3
4
5
int buf1 = Integer.parseInt(cBuf.toString());
int buf2 = Integer.parseInt(tv.getText().toString());               
int result = buf1 + buf2;
 
tv.setText((CharSequence)Integer.toString(result));
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.08.2011, 13:21
Ответы с готовыми решениями:

Как сделать вывод типа "25.000" в textView?
Добрый день! Подскажите, как сделать вывод в TextView числа в таком формате,...

Вывести символ "градус" в TextView
Можно ли в строке вывести число со степенью или температуру в градусах, чтоб...

Постепенно вывести на экран слово "Java", в котором буквы состоят из "интересных" элементов
Я учусь в универе и вот пытаюсь делать лабораторные по языку java, только на...

Как вызвать из программы системное окно "Точка доступа WLAN"?
Подскажите пожалуйста как вызвать из программы системное окно "Точка доступа...

Как сделать приложение полноэкранным и убрать вспомогательные кнопки "назад, главный экран."
Здравствуйте, Можно ли сделать приложение на весь экран, и убрать от туда...

8
petruchodd
09.08.2011, 14:11
  #2

Не по теме:

Смотри в логе (DDMS) что пишет. Или вылаживай сюда ..

1
Опа!!
16 / 16 / 1
Регистрация: 30.09.2009
Сообщений: 89
09.08.2011, 14:25  [ТС] #3
Вот файл проекта
0
Вложения
Тип файла: rar SimpleCalc.rar (45.6 Кб, 60 просмотров)
Опа!!
16 / 16 / 1
Регистрация: 30.09.2009
Сообщений: 89
09.08.2011, 14:37  [ТС] #4
обработка операций висит только на плюсе
0
petruchodd
129 / 126 / 22
Регистрация: 23.06.2009
Сообщений: 694
Завершенные тесты: 1
09.08.2011, 15:22 #5
в case + : не может пропарсить "+" как integer
int buf1 = Integer.parseInt(cBuf.toString());. Насколько я понял ты хочешь строку типа " 2+2+3+4" перевести в результат ? тоесть калькулятор твой считает не так : 2 (ввел) + (нажал) ввел ещо 2 и это сразу показывает новый результат, а в твоем случае мы нажали 2... + и на вводе уже пусто. Значит предположение мое верно.. ввел 2... ничего не показывает, ввел ещо 2 ( при этом нажимаем +) и так несколько раз.. Потом нажав на равно мы получим суму всех тех цыфр что мы ввели ?.
ошибка вот
C++
1
08-09 11:17:25.852: ERROR/AndroidRuntime(942): Caused by: java.lang.NumberFormatException: unable to parse '+' as integer
"строка 96"

К сожелению в андроиде я такого не встречал, но друг подсказал что такой фигней он когда то страдал на javaScript. Там есть функция eval.. так что советую копать в этом направлении. Сейчас на работе.. периодически буду тоже просматривать, а то самому интересно.
1
Опа!!
16 / 16 / 1
Регистрация: 30.09.2009
Сообщений: 89
09.08.2011, 15:46  [ТС] #6
Сперва вбиваем первое число, допустим 123, жмем на +, введенное число сохраняется в cBuf, textView очищается и ждет ввода следующего значения. По нажатию + запомнили что был нажат именно +. По нажатию равно свитч на переменную в которую положили +, ну а там уже складываются значения cBuf и текущее значение, введенное в textView, результат кладется в textView

Добавлено через 17 минут
Java
1
2
3
4
5
6
7
8
9
10
11
switch (curOperation)
        {
            case R.id.button13:
                // снизу закоменченный блок всех моих попыток
                int buf1 = Integer.parseInt(cBuf.toString());
                int buf2 = Integer.parseInt(tv.getText().toString());               
                int result = buf1 + buf2;
 
                tv.setText(Integer.toString(result));
                break;
...
вот свитч через интовое значение R.id.xxx, заходит в него точно, форс клоуз все равно имеется


Код
08-09 11:46:05.219: ERROR/AndroidRuntime(407): FATAL EXCEPTION: main
08-09 11:46:05.219: ERROR/AndroidRuntime(407): java.lang.IllegalStateException: Could not execute method of the activity
08-09 11:46:05.219: ERROR/AndroidRuntime(407):     at android.view.View$1.onClick(View.java:2144)
08-09 11:46:05.219: ERROR/AndroidRuntime(407):     at android.view.View.performClick(View.java:2485)
08-09 11:46:05.219: ERROR/AndroidRuntime(407):     at android.view.View$PerformClick.run(View.java:9080)
08-09 11:46:05.219: ERROR/AndroidRuntime(407):     at android.os.Handler.handleCallback(Handler.java:587)
08-09 11:46:05.219: ERROR/AndroidRuntime(407):     at android.os.Handler.dispatchMessage(Handler.java:92)
08-09 11:46:05.219: ERROR/AndroidRuntime(407):     at android.os.Looper.loop(Looper.java:123)
08-09 11:46:05.219: ERROR/AndroidRuntime(407):     at android.app.ActivityThread.main(ActivityThread.java:3683)
08-09 11:46:05.219: ERROR/AndroidRuntime(407):     at java.lang.reflect.Method.invokeNative(Native Method)
08-09 11:46:05.219: ERROR/AndroidRuntime(407):     at java.lang.reflect.Method.invoke(Method.java:507)
08-09 11:46:05.219: ERROR/AndroidRuntime(407):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
08-09 11:46:05.219: ERROR/AndroidRuntime(407):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
08-09 11:46:05.219: ERROR/AndroidRuntime(407):     at dalvik.system.NativeStart.main(Native Method)
08-09 11:46:05.219: ERROR/AndroidRuntime(407): Caused by: java.lang.reflect.InvocationTargetException
08-09 11:46:05.219: ERROR/AndroidRuntime(407):     at java.lang.reflect.Method.invokeNative(Native Method)
08-09 11:46:05.219: ERROR/AndroidRuntime(407):     at java.lang.reflect.Method.invoke(Method.java:507)
08-09 11:46:05.219: ERROR/AndroidRuntime(407):     at android.view.View$1.onClick(View.java:2139)
08-09 11:46:05.219: ERROR/AndroidRuntime(407):     ... 11 more
08-09 11:46:05.219: ERROR/AndroidRuntime(407): Caused by: java.lang.NumberFormatException: unable to parse '' as integer
08-09 11:46:05.219: ERROR/AndroidRuntime(407):     at java.lang.Integer.parseInt(Integer.java:362)
08-09 11:46:05.219: ERROR/AndroidRuntime(407):     at java.lang.Integer.parseInt(Integer.java:332)
08-09 11:46:05.219: ERROR/AndroidRuntime(407):     at tgn.fraggjkee.android.SimpleCalc.SimpleCalcActivity.solveIt(SimpleCalcActivity.java:96)
08-09 11:46:05.219: ERROR/AndroidRuntime(407):     ... 14 more
1
petruchodd
129 / 126 / 22
Регистрация: 23.06.2009
Сообщений: 694
Завершенные тесты: 1
09.08.2011, 15:53 #7
ну в логе ты ж видишь, та же самая байда. Не может теперь пропарсить пустую строку (" ") Имхо парсом тут не получится.. может имеет смысл использовать отдельно буфер который будет подсчитывать это всё пошагово на фоне ?
1
Опа!!
16 / 16 / 1
Регистрация: 30.09.2009
Сообщений: 89
09.08.2011, 18:20  [ТС] #8
Цитата Сообщение от petruchodd Посмотреть сообщение
ожет имеет смысл использовать отдельно буфер который будет подсчитывать это всё пошагово на фоне ?
суровый подход для такой простой операции для простого калькулятора надеюсь, найдется и более простой и очевидный метод!

Добавлено через 49 минут
все, разобрался, дело-то было не в преобразованиях, неправильное значение помещалось в cBuf, оттуда и ошибка в невозможности запарсить пустую переменную cBuf и что-то там из нее конвертировать

Добавлено через 1 час 32 минуты
petruchodd, забыл сказать огромное спасибо за помощь ;-)
1
petruchodd
10.08.2011, 15:39     textView как "экран" программы-калькулятора
  #9

Не по теме:

я как бы и ничем не помог ( , но если что обращайтесь))

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

Как прикрутить "свой браузер" к странице - "фрагмент"
здравствуйте. все, уже голову сломал. не соображаю совсем. не получается...

Как "превратить" string "6.971245e-001" во float?
Число конечно пример

Работа с БД, связывание таблиц "фильмы", "жанры", "режиссеры"
Ребят, всем привет! накидайте какие-нить идеи по реализации ситуация такая...


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

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

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