Upload Tugas 2
This commit is contained in:
parent
8989a224df
commit
d4005ace70
115
Tugas2/MainActivity.kt
Normal file
115
Tugas2/MainActivity.kt
Normal file
@ -0,0 +1,115 @@
|
||||
package com.example.programpengurutanangka
|
||||
|
||||
import android.os.Bundle
|
||||
import androidx.activity.ComponentActivity
|
||||
import androidx.activity.compose.setContent
|
||||
import androidx.activity.enableEdgeToEdge
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.material3.*
|
||||
import androidx.compose.runtime.*
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.foundation.text.KeyboardOptions
|
||||
import androidx.compose.ui.text.input.KeyboardType
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.example.programpengurutanangka.ui.theme.ProgramPengurutanAngkaTheme
|
||||
|
||||
class MainActivity : ComponentActivity() {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
enableEdgeToEdge()
|
||||
setContent {
|
||||
ProgramPengurutanAngkaTheme {
|
||||
Scaffold { innerPadding ->
|
||||
ProgramPengurutanAngka(
|
||||
modifier = Modifier
|
||||
.padding(innerPadding)
|
||||
.padding(16.dp)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun ProgramPengurutanAngka(modifier: Modifier = Modifier) {
|
||||
var input by remember { mutableStateOf("") }
|
||||
var result by remember { mutableStateOf("") }
|
||||
var error by remember { mutableStateOf<String?>(null) }
|
||||
var ascending by remember { mutableStateOf(true) }
|
||||
|
||||
Column(
|
||||
modifier = modifier.fillMaxSize(),
|
||||
verticalArrangement = Arrangement.Top,
|
||||
horizontalAlignment = Alignment.Start
|
||||
) {
|
||||
OutlinedTextField(
|
||||
value = input,
|
||||
onValueChange = {
|
||||
input = it
|
||||
error = null
|
||||
},
|
||||
label = { Text("Masukkan angka (contoh: 9, 5, 1 atau 9 5 1 atau 9;5;1)") },
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
keyboardOptions = KeyboardOptions.Default.copy(keyboardType = KeyboardType.Text)
|
||||
)
|
||||
|
||||
Spacer(modifier = Modifier.height(8.dp))
|
||||
|
||||
Row(verticalAlignment = Alignment.CenterVertically) {
|
||||
Text("Urutkan:")
|
||||
Spacer(modifier = Modifier.width(8.dp))
|
||||
RadioButton(selected = ascending, onClick = { ascending = true })
|
||||
Text("Ascending", modifier = Modifier.padding(end = 12.dp))
|
||||
RadioButton(selected = !ascending, onClick = { ascending = false })
|
||||
Text("Descending")
|
||||
}
|
||||
|
||||
Spacer(modifier = Modifier.height(12.dp))
|
||||
|
||||
Button(onClick = {
|
||||
// Ambil semua angka yang valid (mendukung sign dan desimal, koma/dot sebagai pemisah desimal)
|
||||
val regex = Regex("-?\\d+[\\.,]?\\d*")
|
||||
val parsed = regex.findAll(input)
|
||||
.map { it.value.replace(',', '.') } // ubah koma jadi dot supaya parseDouble berhasil
|
||||
.mapNotNull { it.toDoubleOrNull() }
|
||||
.toList()
|
||||
|
||||
if (parsed.isEmpty()) {
|
||||
error = "Tidak ditemukan angka valid. Gunakan pemisah koma/spasi/semicolon atau masukkan angka."
|
||||
result = ""
|
||||
} else {
|
||||
val sorted = if (ascending) parsed.sorted() else parsed.sortedDescending()
|
||||
result = sorted.joinToString(", ") { n ->
|
||||
// tampilkan tanpa .0 jika integer
|
||||
if (n % 1.0 == 0.0) n.toLong().toString() else n.toString()
|
||||
}
|
||||
error = null
|
||||
}
|
||||
}) {
|
||||
Text("Urutkan")
|
||||
}
|
||||
|
||||
Spacer(modifier = Modifier.height(12.dp))
|
||||
|
||||
if (error != null) {
|
||||
Text(text = error!!, color = MaterialTheme.colorScheme.error)
|
||||
}
|
||||
|
||||
Text(
|
||||
text = "Hasil: $result",
|
||||
style = MaterialTheme.typography.bodyLarge,
|
||||
modifier = Modifier.padding(top = 8.dp)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Preview(showBackground = true)
|
||||
@Composable
|
||||
fun PreviewProgram() {
|
||||
ProgramPengurutanAngkaTheme {
|
||||
ProgramPengurutanAngka()
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user