Pertemuan 6 - Aplikasi Kalkulator Sederhana

 Kode di blogspot berikut sudah saya modifikasi sehingga berjalan pada Android Studio.

Berikut hasil akhir kodenya:

package com.example.kalkulatorsederhana // WAJIB GANTI SESUAI NAMA PROJECT KAMU

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material3.Button
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.example.kalkulatorsederhana.ui.theme.KalkulatorSederhanaTheme // GANTI INI JUGA

class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContent {
KalkulatorSederhanaTheme { // GANTI INI JUGA
Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
CalculatorScreen(modifier = Modifier.padding(innerPadding))
}
}
}
}
}

@Composable
fun CalculatorScreen(modifier: Modifier = Modifier) {
// State untuk menyimpan inputan pengguna (berupa String dari TextField)
var inputNum1 by remember { mutableStateOf("") }
var inputNum2 by remember { mutableStateOf("") }

// State untuk menyimpan hasil atau pesan error
var resultText by remember { mutableStateOf("Hasil: 0.0") }

// Fungsi internal untuk menghitung, mengadaptasi logika "when" dari kodemu
fun calculate(operator: String) {
// Ubah String ke Double, jika kosong atau bukan angka jadikan null
val num1 = inputNum1.toDoubleOrNull()
val num2 = inputNum2.toDoubleOrNull()

// Validasi input kosong
if (num1 == null || num2 == null) {
resultText = "Error: Masukkan angka yang valid!"
return
}

// Logika perhitungan persis seperti kodemu
val calcResult = when (operator) {
"+" -> num1 + num2
"-" -> num1 - num2
"*" -> num1 * num2
"/" -> {
if (num2 != 0.0) num1 / num2
else {
resultText = "Error: Tidak bisa dibagi 0!"
return
}
}
else -> 0.0
}

// Update state hasil
resultText = "Hasil: $calcResult"
}

Column(
modifier = modifier
.fillMaxSize()
.padding(24.dp),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
Text(
text = "KALKULATOR SEDERHANA",
fontSize = 20.sp,
fontWeight = FontWeight.Bold
)

Spacer(modifier = Modifier.height(24.dp))

// Input Angka Pertama
OutlinedTextField(
value = inputNum1,
onValueChange = { inputNum1 = it },
label = { Text("Masukkan angka pertama") },
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number),
modifier = Modifier.fillMaxWidth()
)

Spacer(modifier = Modifier.height(16.dp))

// Input Angka Kedua
OutlinedTextField(
value = inputNum2,
onValueChange = { inputNum2 = it },
label = { Text("Masukkan angka kedua") },
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number),
modifier = Modifier.fillMaxWidth()
)

Spacer(modifier = Modifier.height(24.dp))

// Baris Tombol Operator
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceEvenly
) {
Button(onClick = { calculate("+") }) { Text("+") }
Button(onClick = { calculate("-") }) { Text("-") }
Button(onClick = { calculate("*") }) { Text("X") }
Button(onClick = { calculate("/") }) { Text("/") }
}

Spacer(modifier = Modifier.height(32.dp))

// Tampilan Hasil
Text(
text = resultText,
fontSize = 24.sp,
fontWeight = FontWeight.Bold
)
}
}

@Preview(showBackground = true)
@Composable
fun CalculatorPreview() {
KalkulatorSederhanaTheme { // GANTI INI JUGA
CalculatorScreen()
}
}

Kode berjalan dengan kalkulator sederhana pada mobile:



Komentar

Postingan populer dari blog ini

Pertemuan 3 - Aplikasi Selamat Ulang Tahun

ETS PPB - Money Notes Application

Pertemuan 1 - Rangkuman Mobile Programming