package Ġproject . eric . calculator Ċ Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . TextView Ċ import Ġandroid . widget . Toast Ċ import Ġjava . lang . Arithmetic Exception Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtv Input Ġ: TextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtv Output Ġ: TextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbtn Equal Ġ: Button ĊĊĠĠĠ Ġprivate Ġval Ġlist Ġ= Ġarray ListOf < String >(" ") ĊĠĠĠ Ġvar Ġindex Ġ= Ġ 0 ; ĊĊĠĠĠ Ġvar Ġfirst Input Ġ: Boolean Ġ= Ġtrue ĊĠĠĠ Ġvar Ġlast Numeric Ġ: Boolean Ġ= Ġfalse ĊĠĠĠ Ġvar Ġlast Dot Ġ: Boolean Ġ= Ġfalse ĊĠĠĠ Ġvar Ġlast Operator Ġ: Boolean Ġ= Ġfalse ĊĠĠĠ Ġvar Ġlast Percent Ġ: Boolean Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĠĠĠĠĠĠĠ Ġtv Input Ġ= ĠfindViewById ( R . id . tv Input ) ĊĠĠĠĠĠĠĠ Ġtv Output Ġ= ĠfindViewById ( R . id . tv Output ) ĊĠĠĠĠĠĠĠ Ġbtn Equal Ġ= ĠfindViewById ( R . id . btn Equal ) ĊĊĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Digit ( view Ġ: ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġdigit Ġ= Ġ( view Ġas ĠButton ). text ĊĠĠĠĠĠĠĠ Ġif Ġ( first Input ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Input Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Input . text Ġ= Ġdigit ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist [ index ] Ġ= Ġ"$ digit " ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( last Percent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add (" x ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ("$ digit ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Numeric Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Operator Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Percent Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( last Operator Ġ&& Ġ! last Numeric ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex ++ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Input . append ( digit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ("$ digit ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Numeric Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Operator Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Input . append ( digit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist [ index ] Ġ= Ġlist [ index ] Ġ+ Ġdigit ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Numeric Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Operator Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Dot Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠonUpdate Output () ĊĠĠĠĠĠĠĠ ĠLog . i (" test ", Ġlist . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Clear ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠReset Ġinput ĠTextView ĊĠĠĠĠĠĠĠ Ġtv Input . text Ġ= Ġ" 0 " ĊĠĠĠĠĠĠĠ Ġtv Output . text Ġ= Ġ"" ĊĊĠĠĠĠĠĠĠ Ġ// ĠReset Ġlist ĊĠĠĠĠĠĠĠ Ġlist . clear () ĊĠĠĠĠĠĠĠ Ġlist . add ("") ĊĠĠĠĠĠĠĠ Ġindex Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġ// ĠReset ĠB ooleans ĊĠĠĠĠĠĠĠ Ġlast Numeric Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġlast Dot Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġlast Operator Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġfirst Input Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Decimal Point ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( last Percent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add (" x ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add (" 0 .") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Percent Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Dot Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( last Numeric Ġ&& Ġ! last Dot ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Input . append (".") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Numeric Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Dot Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Operator ( view Ġ: View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( first Input Ġ&& Ġ! last Numeric ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Invalid ĠInput ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtv Output . text Ġ= Ġ"" ĊĊĠĠĠĠĠĠĠ Ġvar Ġoperator Ġ= Ġ( view Ġas ĠButton ). text ĊĠĠĠĠĠĠĠ Ġif Ġ( last Operator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Input . text Ġ= Ġtv Input . text . substring ( 0 , Ġtv Input . text . length Ġ- Ġ 1 ) Ġ+ Ġoperator ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist [ index ] Ġ= Ġ"$ operator " ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Input . append ( operator ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ("$ operator ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Numeric Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Dot Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Percent Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Input Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Operator Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Percent ( view Ġ: View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( last Percent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Invalid ĠFormat ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Input . append (( view Ġas ĠButton ). text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist [ index ] Ġ= Ġlist [ index ] Ġ+ Ġ"% " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Numeric Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Dot Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Operator Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Percent Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠonUpdate Output () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun ĠonUpdate Output () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( last Numeric Ġ|| Ġlast Percent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Output . text Ġ= Ġremove Zero After Dot ( calculate ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcalculate (): String Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġequation Ġ= Ġlist . clone () Ġas ĠArrayList < String > ĊĊĠĠĠĠĠĠĠ Ġ// ĠPercent s Ġfirst ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġequation . size Ġstep Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcur Ġ= Ġequation [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cur . contains ("% ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnum Ġ= Ġcur . substring ( 0 , Ġcur . indexOf ("% ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġequation [ i ] Ġ= Ġ"" Ġ+ Ġnum . toDouble () Ġ/ Ġ 1 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ 1 + 2 / 2 + 1 ĊĠĠĠĠĠĠĠ Ġ// Ġ 0 1 2 3 4 5 6 ĊĠĠĠĠĠĠĠ Ġ// Ġ 1 + 1 + 1 ĊĠĠĠĠĠĠĠ Ġ// Ġ 0 1 2 3 4 ĊĠĠĠĠĠĠĠ Ġvar Ġmd Ġ: Boolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġwhile (! md ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġequation . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtotal Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnum 1 Ġ= Ġequation [ i Ġ- Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnum 2 Ġ= Ġequation [ i Ġ+ Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġoperator Ġ= Ġequation [ i ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġskip s Ġ+ Ġand Ġ- ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( operator Ġ== Ġ" +" Ġ|| Ġoperator Ġ== Ġ"- ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ+= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( operator Ġ== Ġ" Ã · ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Ġ= Ġnum 1 . toDouble () Ġ/ Ġnum 2 . toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġequation . add ( i Ġ+ Ġ 2 , Ġ"$ total ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġequation . remove At ( i Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġequation . remove At ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġequation . remove At ( i Ġ- Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( operator Ġ== Ġ" x ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Ġ= Ġnum 1 . toDouble () Ġ* Ġnum 2 . toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġequation . add ( i Ġ+ Ġ 2 , Ġ"$ total ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġequation . remove At ( i Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġequation . remove At ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġequation . remove At ( i Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmd Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠLog . i (" test ", Ġequation . toString ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠAt Ġthis Ġpoint , Ġshould Ġbe Ġno Ġmultiply Ġand Ġdivide Ġoperators ĊĊĠĠĠĠĠĠĠ Ġwhile ( equation . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. equation . size Ġstep Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtotal Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnum 1 Ġ= Ġequation [ i Ġ- Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnum 2 Ġ= Ġequation [ i Ġ+ Ġ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġoperator Ġ= Ġequation [ i ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( operator Ġ== Ġ"+ ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Ġ= Ġnum 1 . toDouble () Ġ+ Ġnum 2 . toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġequation . add ( i Ġ+ Ġ 2 , Ġ"$ total ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( operator Ġ== Ġ"- "){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Ġ= Ġnum 1 . toDouble () Ġ- Ġnum 2 . toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġequation . add ( i Ġ+ Ġ 2 , Ġ"$ total ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġequation . remove At ( i Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġequation . remove At ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġequation . remove At ( i Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġwhole Ġequation Ġshould Ġhave Ġbeen Ġcalculated Ġby Ġnow Ġand Ġthe Ġanswer Ġwill Ġbe Ġin Ġindex Ġ 0 ĊĠĠĠĠĠĠĠ Ġreturn Ġequation [ 0 ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Equal ( view Ġ: View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( list . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcurrent Ġ= Ġtv Output . text ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Clear ( view ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Input . text Ġ= Ġcurrent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist [ 0 ] Ġ= Ġ"$ current " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Numeric Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Invalid ĠInput ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġremove Zero After Dot ( result Ġ: String ) Ġ: String Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġvalue Ġ= Ġresult ĊĠĠĠĠĠĠĠ Ġif Ġ( result . contains (". 0 ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Ġ= Ġresult . substring ( 0 , Ġresult . length Ġ- Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġw ip ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Work Ġin ĠProgress ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠ Ġ} Ċ }