2014-02-10 4 views
0

как попадание в android я решил заменить калькулятор по умолчанию моим. Простой калькулятор с 4 рабочими знаками. Я давал всем кнопкам правильное поведение, сохраняя каждое число в «num» ArrayList (String) и подписываясь на «знак» ArrayList (String).Калькулятор подход к подходу

То, что я хотел сделать, заключалось в том, чтобы затем объединить числа и знаки в строку, разобрать ее в поплавок и получить результат. Я думал, что это был один из самых простых/простых способов борьбы с ним, так как при установке поплавок так:

float f = 6*4-5/2+3 

это дает правильный результат. но это явно не при запуске из строки, например:

String s = "6*4-5/2+3" 
Float f = Float.valueOf(s) 

Есть ли способ, чтобы получить результат от моего 2 ArrayList (String)? В отрицательном случае, что было бы приемлемым подходом (в смысле я не опытный программист)?

+0

Использование алгоритма DijkstraTwoStack для оценки выражения. Это поможет вам решить проблему, если хотите, я добавлю код в ответ? –

+0

взгляните на эту библиотеку http://www.objecthunter.net/exp4j/ –

+0

Эй, @AnuranjitMaindolan и A.S .. Ill взгляните на обе свои идеи. Большое спасибо! – NicolaF

ответ

0

Я думаю, что этот подход неверен. Я бы сделал следующее:

У вас был бы Textview или Edittext в качестве «экрана» калькулятора сверху.

тогда у вас будут все ваши номера и кнопки рабочих знаков.

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

когда вы нажмете на знак оператора - две вещи будут происходить:

1) число в TextView будет храниться в виде Float (с использованием Float.valueOf(yourTextView); в varibale, скажем firstNum.

2) вы сэкономите оператора вы щелкнули во второй переменной, скажем, Струнный calcOper.

Теперь вы вводите свой второй номер, а затем вы нажимаете знак равенства.

Что произойдет тогда, просто используйте выражение Switch из If.

Если calcOper есть "-" - тогда сделать firstNum - Текущий номер, указанный на экране.

Если calcOper есть "+" - тогда сделать firstNum + Текущий номер, указанный на экране.

Наконец, не забудьте установить текст в TextView в результате.

Удачи вам!

+0

Эй, спасибо! Проблема в том, что я хочу иметь возможность выполнять несколько и более длительных операций. Поэтому мне нужно иметь возможность хранить больше чисел, а не только 2. И я не могу выполнить первую операцию, а затем вторую, а затем третью и так далее, потому что в случае, если у меня есть это «6 + 4/2», мне нужно было бы сделать 4/2 и только тогда 6+ результат предыдущего. – NicolaF

+0

О хранении большего количества номеров это не проблема - вы просто сохраняете результат в третьей переменной. О длинных цепных операциях я могу придумать решение, но оно длинное и сложное - я уверен, что есть гораздо лучшие ответы :-) – gilonm

Смежные вопросы