Anfänger braucht Hilfe bei Kotlin

  • 17 Antworten
  • Letztes Antwortdatum
Status
Dieses Thema wurde gelöst! Zur Lösung springen…
D

datNeMo

Neues Mitglied
0
Hallo Community,

also im Großen und ganzen, bin ich neu in diesem Gebiet App Programmierung.

Möchte mir aber meine eigene App programmieren.

Über einen Alert Dialog möchte ich einen reine Fließkommazahl eingeben und mit dieser rechnen.
In meinen Büchern wird nicht groß über Alert Dialog gesprochen. Nach langem probieren und recherchieren, habe ich bereits rausgefunden, dass es ein String ist und damit kann man nicht rechnen.

Jetzt liegt meine Frage schon auf der Hand. Wie mache ich in Alert Dialog aus dem String ein Double, bzw. Zahlen mit dem man rechnen kann?
 
Empfohlene Antwort(en)
na ob das Passt. sicher nicht.
Code:
val input = AlertDialog.Builder(this)
            input.setTitle("in kW")

            val eingegeben = EditText(this)
            eingegeben.hint = "Leistung eingeben"

            eingegeben.inputType = InputType.TYPE_CLASS_NUMBER
            input.setView(eingegeben)

            input.setPositiveButton("weiter") { _, _ ->
                val scheinLeistung: Double? = eingegeben.text.toString().toDouble()
so in etwa
ob deine Formel past.

Wirkstrom ist doch U / S * cosP * Wurzel 3
 
Alle Antworten (17)
val dstr1 = "1.234567899999"
val double1: Double? = dstr1.toDouble()
 
  • Danke
Reaktionen: swa00
@datNeMo


a)
In meinen Büchern wird nicht groß über Alert Dialog gesprochen.
Ein AlertDialog - das sagt schon der Name - ist nicht dafür angedacht - Da solltest Du schon einen Dialog nehmen und ihn mit einem passenden Layout ausstatten.

b)
Nach langem probieren und recherchieren, habe ich bereits rausgefunden, dass es ein String ist und damit kann man nicht rechnen.
Jeder numerische String lässt sich mit der entsprechenden Konvertierung und richtigen Formatierung berechnen - siehe @jogimuc
Und das ist in allen Programmiersprachen so.


Ich vermute doch schon bei dieser Frage , dass dir erhebliche Grundkenntnisse in der Programmierung fehlen.
Weshalb ich anrate , erst einmal die Grundlagen von Kotlin kennen zu lernen , bevor du eine AndroidApp entwickelst.
kotlin-stdlib - Kotlin Programming Language
toDouble - Kotlin Programming Language

Kotlin and Android | Android Developers
 
Zuletzt bearbeitet:
@swa00

mit dem Grundkenntnissen in der App-Programmierung gebe ich Ihnen recht. Habe mich eher mit Arduino beschäftigt und dass auch nur als Hobby.

Vom Beruf bin ich Elektromeister und muss öfters Leitungen berechnen. Damit ich nicht immer in Normen schauen muss wollte ich mir eine eigene App erstellen. Ja, es gibt schon solche Apps, aber leider voll mit Werbung oder Herstellerabhängig.

Finde diese AlertDialog sehr gut, da man alles nach und nach eingeben kann und nichts vergisst.
 
Wenn es unbedingt Alert sein soll ist es das auch machbar.

Zeige uns doch mal einen, wie du ihn hast.

Du wirst da doch bestimmt einen EditText in dem Layout vom Alert, zur Eingabe haben und da kommt wie du nun schon weist ein String zurück.
Wie du eine String in einen Double. Float ... Parsen kannst habe ich dir ja schon gezeigt.
 
  • Danke
Reaktionen: swa00
Moin, OT: Bin immer wieder erstaunt, was hier an Wissen zu finden ist. Danke :)
 
  • Danke
Reaktionen: swa00
val editTextInput = ""

val inputEditTextField = EditText(requireActivity())
val dialog = AlertDialog.Builder(requireContext())
.setTitle("Title")
.setMessage("Message")
.setView(inputEditTextField)
.setPositiveButton("OK") { _, _ ->
editTextInput = inputEditTextField .text.toString()

}
.create()
dialog.show()
Parsen kannst du den String nun selber.

 
  • Danke
Reaktionen: swa00
Code:
 B.btnKW.setOnClickListener {


                 var laenge = EditText(this)

                 laenge.hint = "Leitungslänge eingeben"

                val input3 = AlertDialog.Builder(this)
                input3.setTitle("in Meter")

                laenge.inputType = InputType.TYPE_CLASS_NUMBER

                input3.setView(laenge)

                input3.setPositiveButton("weiter") { _, _ ->


                    val input = AlertDialog.Builder(this)
                    input.setTitle("in kW")

                    val eingegeben = EditText(this)
                    eingegeben.hint = "Leistung eingeben"

                    eingegeben.inputType = InputType.TYPE_CLASS_NUMBER


                    input.setView(eingegeben)

                    input.setPositiveButton("weiter") { _, _ ->


                        val input2 = AlertDialog.Builder(this)
                        input2.setTitle("cos φ in %")


                        val eingabeCos = EditText(this)

                        eingabeCos.hint = "Leistungsfaktor eingeben"
                        eingabeCos.inputType = InputType.TYPE_CLASS_NUMBER

                        input2.setView(eingabeCos)

                        input2.setPositiveButton("Ok") { _, _ ->



            B.tvLtgEingabe.text = "${laenge.text}m; ${eingegeben.text}kW; ${eingabeCos.text}%; "


                        //Berechnen
                            val dstr1 = "${eingegeben}"
                            val P: Double? = dstr1.toDouble()
                            val dstr2 = "${eingabeCos}"
                            val cos2: Double? = dstr2.toDouble()

                            var Strom = P / sqrt(3.0) / spd / cos2

                            B.tv0298.text = "${Strom}A"

                    }


                    input2.setNegativeButton("Abbrechen") { _, _ ->
                        Toast.makeText(applicationContext, "Abgebrochen", Toast.LENGTH_SHORT).show()
                    }
                    input2.show()
                }

                input.setNegativeButton("Abbrechen") { _, _ ->
                    Toast.makeText(applicationContext, "Abgebrochen", Toast.LENGTH_SHORT).show()
                }
                input.show()

                }
                input3.setNegativeButton("Abbrechen") { _, _ ->
                    Toast.makeText(applicationContext, "Abgebrochen", Toast.LENGTH_SHORT).show()
                }
                input3.show()
            }

Bei //Berechnen habe ich jetzt nur noch das von @jogimuc zum Ausprobieren eingefügt
 
Zuletzt bearbeitet:
na ob das Passt. sicher nicht.
Code:
val input = AlertDialog.Builder(this)
            input.setTitle("in kW")

            val eingegeben = EditText(this)
            eingegeben.hint = "Leistung eingeben"

            eingegeben.inputType = InputType.TYPE_CLASS_NUMBER
            input.setView(eingegeben)

            input.setPositiveButton("weiter") { _, _ ->
                val scheinLeistung: Double? = eingegeben.text.toString().toDouble()
so in etwa
ob deine Formel past.

Wirkstrom ist doch U / S * cosP * Wurzel 3
 
@jogimuc
Danke für den Code. den probiere gleich mal aus.

Zu der Formel: (für normale Taschenrechner) I = S / U / Wurzel 3 oder S / (U * Wurzel 3) und für Taschenrechner mit Bruchstrich:
Formel.png

Wenn Sie mit der Scheinleistung rechnen, dann ohne Wirkfaktor, weil dieser bereits in der Scheinleistung steckt.

Die Leistung steht über den Bruchstrich, weil es das Produkt aus Spannung und Strom ist => Spannung ist das Produkt aus Strom und Widerstand

Aber dies gehört nicht in dieses Forum.
 
was willst du Berechnen ?
Den WirkStrom oder ScheinStrom ?
Was hast du?

Wenn es zb ein Motor ist, ist die Leistung in KW auf dem Typen Schild die mechanische Leistung an der Welle, nicht die elektrische Leistung.

Da musst du, wenn angegeben den Nennstrom benutzen was dann der Scheinstrom ist.
 
Zuletzt bearbeitet:
sowas wie Wirkstrom und Scheinstrom gibt es nicht, aber Schein-, Blind- und Wirkleistung. Rechnet wird mit der Scheinleistung um den Nennstrom der Sicherung zu ermitteln um dann die passende Leitung zu bestimmen.

dein Code hat funktioniert. Musste in der Formel noch !! setzen und jetzt läuft es.

jetzt nun noch Runden und ich habe ein brauchbares Ergebnis.

Nochmals vielen Dank, ging schon seit zwei Wochen daran
 
datNeMo schrieb:
sowas wie Wirkstrom und Scheinstrom gibt es nicht,
doch dann schaue in die Fach Literatur.
Solltest du als Elektriker mal gelernt haben.



Dann fragst du die Leistung in der Maßeinheit „KW“ ab aber beim Rechnen teilst du es nicht durch 1000
Somit bekommst den Strom in „KA“
 
Code:
var ergebnis:Double = P!!*1000 / (sqrt(3.0) * spd * phi!!/100)
val strom = ergebnis.toBigDecimal().setScale(2,RoundingMode.UP)
B.strom.text = "${strom}A"

hab die Präfixe bedacht
 
datNeMo schrieb:
wenn du die Eingabe in dezimal nicht nur Ziffern zu lässt.
Kannst du auch kommazahlen eingeben und nicht nur ganze zahlen.

wirst du bei KW auch brauchen du willst ja zb 3,42 KW eingeben können
 
hab ich auch schon versucht, jedoch nimmt er nur class_number oder number_flag_decimal. hätte aber gerne nur eine Tastatur mit Zahlen
 
Dank. Das Zauberwort ist 'or' um zwei Typen zu verbinden
 
Status
Dieses Thema wurde gelöst! Zur Lösung springen…

Ähnliche Themen

D
Antworten
4
Aufrufe
278
Appento
Appento
O
  • ortech
Antworten
7
Aufrufe
883
jogimuc
J
netfreak
Antworten
24
Aufrufe
785
chk142
C
Zurück
Oben Unten