Skip to content

Commit 4303803

Browse files
committed
added caculation function
1 parent d760e27 commit 4303803

File tree

4 files changed

+452
-37
lines changed

4 files changed

+452
-37
lines changed

.idea/misc.xml

-31
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,61 @@
11
package kt.leonbec.calculator
22

3-
import android.support.v7.app.AppCompatActivity
43
import android.os.Bundle
4+
import android.support.v7.app.AppCompatActivity
5+
import android.view.View.OnClickListener
6+
import android.widget.Button
7+
import kotlinx.android.synthetic.main.activity_main.*
58

69
class MainActivity : AppCompatActivity() {
710

11+
//Variables to hold the operands and calculation type
12+
private var operand1: Double? = null
13+
private var operand2 = 0.0
14+
private var pendingOperation = "="
15+
816
override fun onCreate(savedInstanceState: Bundle?) {
917
super.onCreate(savedInstanceState)
1018
setContentView(R.layout.activity_main)
19+
20+
val inputML = mutableListOf<Button>(btn0, btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9, btnDot)
21+
val operationML = mutableListOf<Button>(btnEquals, btnDivide, btnMultiply, btnMinus, btnPlus)
22+
23+
val inputListener = OnClickListener {
24+
if (it is Button)
25+
etNewNumber.append(it.text)
26+
}
27+
28+
val operationListener = OnClickListener {
29+
if (it is Button) {
30+
val operation = it.text.toString()
31+
val value = etNewNumber.text.toString()
32+
if (value.isNotBlank())
33+
performOperation(value, operation)
34+
pendingOperation = operation
35+
tvOperation.text = pendingOperation
36+
}
37+
}
38+
inputML.forEach { it.setOnClickListener(inputListener) }
39+
operationML.forEach { it.setOnClickListener(operationListener) }
40+
}
41+
42+
private fun performOperation(value: String, operation: String) {
43+
if (operand1 == null)
44+
operand1 = value.toDouble()
45+
else {
46+
operand2 = value.toDouble()
47+
if (pendingOperation == "=")
48+
pendingOperation = operation
49+
50+
when (pendingOperation) {
51+
"=" -> operand1 = operand2
52+
"/" -> operand1 = if (operand2 == 0.0) Double.NaN else operand1!! / operand2
53+
"*" -> operand1 = operand1!! * operand2
54+
"-" -> operand1 = operand1!! - operand2
55+
"+" -> operand1 = operand1!! + operand2
56+
}
57+
etResult.setText(operand1.toString())
58+
etNewNumber.setText("")
59+
}
1160
}
1261
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,206 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:app="http://schemas.android.com/apk/res-auto"
4+
xmlns:tools="http://schemas.android.com/tools"
5+
android:layout_width="match_parent"
6+
android:layout_height="match_parent"
7+
tools:context="kt.leonbec.calculator.MainActivity">
8+
9+
<EditText
10+
android:id="@+id/etResult"
11+
android:layout_width="wrap_content"
12+
android:layout_height="wrap_content"
13+
android:layout_marginTop="16dp"
14+
android:defaultFocusHighlightEnabled="true"
15+
android:ems="10"
16+
android:focusable="false"
17+
android:focusableInTouchMode="false"
18+
android:inputType="numberSigned|numberDecimal"
19+
app:layout_constraintEnd_toEndOf="parent"
20+
app:layout_constraintTop_toTopOf="parent" />
21+
22+
<TextView
23+
android:id="@+id/tvOperation"
24+
android:layout_width="wrap_content"
25+
android:layout_height="wrap_content"
26+
android:layout_marginEnd="8dp"
27+
android:layout_marginStart="8dp"
28+
android:textSize="18sp"
29+
android:textStyle="bold"
30+
app:layout_constraintBaseline_toBaselineOf="@+id/btn7"
31+
app:layout_constraintEnd_toStartOf="@id/btn7"
32+
app:layout_constraintStart_toStartOf="parent" />
33+
34+
<EditText
35+
android:id="@+id/etNewNumber"
36+
android:layout_width="wrap_content"
37+
android:layout_height="wrap_content"
38+
android:layout_marginEnd="8dp"
39+
android:layout_marginStart="8dp"
40+
android:ems="10"
41+
android:inputType="numberSigned|numberDecimal"
42+
app:layout_constraintBaseline_toBaselineOf="@+id/etResult"
43+
app:layout_constraintEnd_toStartOf="@+id/etResult"
44+
app:layout_constraintStart_toStartOf="parent" />
45+
46+
<Button
47+
android:id="@+id/btn0"
48+
android:layout_width="wrap_content"
49+
android:layout_height="wrap_content"
50+
android:layout_marginTop="8dp"
51+
android:minWidth="48dp"
52+
android:text="0"
53+
app:layout_constraintStart_toStartOf="@+id/btn1"
54+
app:layout_constraintTop_toBottomOf="@+id/btn1" />
55+
56+
<Button
57+
android:id="@+id/btn1"
58+
android:layout_width="wrap_content"
59+
android:layout_height="wrap_content"
60+
android:layout_marginTop="8dp"
61+
android:minWidth="48dp"
62+
android:text="1"
63+
app:layout_constraintStart_toStartOf="@+id/btn4"
64+
app:layout_constraintTop_toBottomOf="@+id/btn4" />
65+
66+
<Button
67+
android:id="@+id/btn2"
68+
android:layout_width="wrap_content"
69+
android:layout_height="wrap_content"
70+
android:layout_marginStart="8dp"
71+
android:minWidth="48dp"
72+
android:text="2"
73+
app:layout_constraintBaseline_toBaselineOf="@+id/btn1"
74+
app:layout_constraintStart_toEndOf="@+id/btn1" />
75+
76+
<Button
77+
android:id="@+id/btn3"
78+
android:layout_width="wrap_content"
79+
android:layout_height="wrap_content"
80+
android:layout_marginStart="8dp"
81+
android:minWidth="48dp"
82+
android:text="3"
83+
app:layout_constraintBaseline_toBaselineOf="@+id/btn2"
84+
app:layout_constraintStart_toEndOf="@+id/btn2" />
85+
86+
<Button
87+
android:id="@+id/btn4"
88+
android:layout_width="wrap_content"
89+
android:layout_height="wrap_content"
90+
android:layout_marginTop="8dp"
91+
android:minWidth="48dp"
92+
android:text="4"
93+
app:layout_constraintStart_toStartOf="@+id/btn7"
94+
app:layout_constraintTop_toBottomOf="@+id/btn7" />
95+
96+
<Button
97+
android:id="@+id/btn5"
98+
android:layout_width="wrap_content"
99+
android:layout_height="wrap_content"
100+
android:layout_marginStart="8dp"
101+
android:minWidth="48dp"
102+
android:text="5"
103+
app:layout_constraintBaseline_toBaselineOf="@+id/btn4"
104+
app:layout_constraintStart_toEndOf="@+id/btn4" />
105+
106+
<Button
107+
android:id="@+id/btn6"
108+
android:layout_width="wrap_content"
109+
android:layout_height="wrap_content"
110+
android:layout_marginStart="8dp"
111+
android:minWidth="48dp"
112+
android:text="6"
113+
app:layout_constraintBaseline_toBaselineOf="@+id/btn5"
114+
app:layout_constraintStart_toEndOf="@+id/btn5" />
115+
116+
<Button
117+
android:id="@+id/btn7"
118+
android:layout_width="wrap_content"
119+
android:layout_height="wrap_content"
120+
android:layout_marginTop="8dp"
121+
android:minWidth="48dp"
122+
android:text="7"
123+
app:layout_constraintStart_toStartOf="@+id/etNewNumber"
124+
app:layout_constraintTop_toBottomOf="@+id/etNewNumber" />
125+
126+
<Button
127+
android:id="@+id/btn8"
128+
android:layout_width="wrap_content"
129+
android:layout_height="wrap_content"
130+
android:layout_marginStart="8dp"
131+
android:minWidth="48dp"
132+
android:text="8"
133+
app:layout_constraintBaseline_toBaselineOf="@+id/btn7"
134+
app:layout_constraintStart_toEndOf="@+id/btn7" />
135+
136+
<Button
137+
android:id="@+id/btn9"
138+
android:layout_width="wrap_content"
139+
android:layout_height="wrap_content"
140+
android:layout_marginStart="8dp"
141+
android:minWidth="48dp"
142+
android:text="9"
143+
app:layout_constraintBaseline_toBaselineOf="@+id/btn8"
144+
app:layout_constraintStart_toEndOf="@+id/btn8" />
145+
146+
<Button
147+
android:id="@+id/btnDivide"
148+
android:layout_width="wrap_content"
149+
android:layout_height="wrap_content"
150+
android:layout_marginStart="8dp"
151+
android:minWidth="48dp"
152+
android:text="/"
153+
app:layout_constraintBaseline_toBaselineOf="@+id/btn9"
154+
app:layout_constraintStart_toEndOf="@+id/btn9" />
155+
156+
<Button
157+
android:id="@+id/btnMultiply"
158+
android:layout_width="wrap_content"
159+
android:layout_height="wrap_content"
160+
android:layout_marginStart="8dp"
161+
android:minWidth="48dp"
162+
android:text="*"
163+
app:layout_constraintBaseline_toBaselineOf="@+id/btn6"
164+
app:layout_constraintStart_toEndOf="@+id/btn6" />
165+
166+
<Button
167+
android:id="@+id/btnMinus"
168+
android:layout_width="wrap_content"
169+
android:layout_height="wrap_content"
170+
android:layout_marginStart="8dp"
171+
android:minWidth="48dp"
172+
android:text="-"
173+
app:layout_constraintBaseline_toBaselineOf="@+id/btn3"
174+
app:layout_constraintStart_toEndOf="@+id/btn3" />
175+
176+
<Button
177+
android:id="@+id/btnDot"
178+
android:layout_width="wrap_content"
179+
android:layout_height="wrap_content"
180+
android:layout_marginStart="8dp"
181+
android:minWidth="48dp"
182+
android:text="."
183+
app:layout_constraintBaseline_toBaselineOf="@+id/btn0"
184+
app:layout_constraintStart_toEndOf="@+id/btn0" />
185+
186+
<Button
187+
android:id="@+id/btnEquals"
188+
android:layout_width="wrap_content"
189+
android:layout_height="wrap_content"
190+
android:layout_marginStart="8dp"
191+
android:minWidth="48dp"
192+
android:text="="
193+
app:layout_constraintBaseline_toBaselineOf="@+id/btnDot"
194+
app:layout_constraintStart_toEndOf="@+id/btnDot" />
195+
196+
<Button
197+
android:id="@+id/btnPlus"
198+
android:layout_width="wrap_content"
199+
android:layout_height="wrap_content"
200+
android:layout_marginStart="8dp"
201+
android:minWidth="48dp"
202+
android:text="+"
203+
app:layout_constraintBaseline_toBaselineOf="@+id/btnEquals"
204+
app:layout_constraintStart_toEndOf="@+id/btnEquals" />
205+
206+
</android.support.constraint.ConstraintLayout>

0 commit comments

Comments
 (0)