1
123thomas
Fortgeschrittenes Mitglied
- 44
Hallo,
ich programmiere schon etwas länger in C# und nun habe ich mich, da es auch sehr ähnlich ist, dem Java bzw. Android gewidmet. Ich bin derzeit dabei einen kleinen Taschenrechner zu programmieren. Bin auch schon ziemlich weit. Es ist ein Taschenrechner der auch den eingegebenen Rechenweg anzeigt.
Ich habe im Prinzip 3 double Werte Zahl1, Zahl2 und Ergebnis. Soweit so gut, in einem TextView (Anzeige) gebe ich Zahlen ein und das Ergebnis aus. Über der Anzeige ist ein weiteres TextView (Formelanzeige), welches den Rechenweg mit ausgibt.
Nun möchte ich wenn die Taste gleich betätigt wird(OnClickListener) den Rechenweg anzeigen lassen. Mein Problem ist, dass ich dabei die double Werte Zahl 1 und Zahl2 nicht umwandeln bzw casten kann. Ich habe schon folgendes versucht:
String Wert = Double.toString(Zahl1);
String Wert = String.valueOf(Zahl1);
String Wert = Zahl1 + "";
String Wert = (String) Zahl1;
Klasse mit Thread erstellen für die umwandlung
Methode mit double als Parameter und mit String als Return
usw.
Mein größtes Problem ist allerdings, dass bei dem Absturz keine Exception geworfen wird, womit man den Fehler finden kann.
Der Absturz sieht so aus, dass der Button betätigt bleibt, aber die App nicht angehalten wird. Es steht dort nicht nach kurzer Zeit:"Taschenrechner angehalten"
Ich kann eine Zahl in die Anzeige bringen und danach als String weiter verarbeiten. Es funktioniert aber nicht, das ich die aktuelle Anzeige speichere und dann einen Wert in die Anzeige schreibe und als String wieder auslese und danach den alten Wert wieder hineinschreibe.
Ich glaube der gesamte Quelltext würde hier den Rahmen sprengen aber ich schneide gleich nochmal die wichtigen Zeilen raus und hänge diese an.
Als Hinweis. Die App funktionierte vorher ohne die Rechenwegsanzeige. Nun wollte ich diese gerne einfügen. Wenn ich wichtige Details ausgelassen habe dann fragt bitte danach.
Gruß Thomas
ich programmiere schon etwas länger in C# und nun habe ich mich, da es auch sehr ähnlich ist, dem Java bzw. Android gewidmet. Ich bin derzeit dabei einen kleinen Taschenrechner zu programmieren. Bin auch schon ziemlich weit. Es ist ein Taschenrechner der auch den eingegebenen Rechenweg anzeigt.
Ich habe im Prinzip 3 double Werte Zahl1, Zahl2 und Ergebnis. Soweit so gut, in einem TextView (Anzeige) gebe ich Zahlen ein und das Ergebnis aus. Über der Anzeige ist ein weiteres TextView (Formelanzeige), welches den Rechenweg mit ausgibt.
Nun möchte ich wenn die Taste gleich betätigt wird(OnClickListener) den Rechenweg anzeigen lassen. Mein Problem ist, dass ich dabei die double Werte Zahl 1 und Zahl2 nicht umwandeln bzw casten kann. Ich habe schon folgendes versucht:
String Wert = Double.toString(Zahl1);
String Wert = String.valueOf(Zahl1);
String Wert = Zahl1 + "";
String Wert = (String) Zahl1;
Klasse mit Thread erstellen für die umwandlung
Methode mit double als Parameter und mit String als Return
usw.
Mein größtes Problem ist allerdings, dass bei dem Absturz keine Exception geworfen wird, womit man den Fehler finden kann.
Der Absturz sieht so aus, dass der Button betätigt bleibt, aber die App nicht angehalten wird. Es steht dort nicht nach kurzer Zeit:"Taschenrechner angehalten"
Ich kann eine Zahl in die Anzeige bringen und danach als String weiter verarbeiten. Es funktioniert aber nicht, das ich die aktuelle Anzeige speichere und dann einen Wert in die Anzeige schreibe und als String wieder auslese und danach den alten Wert wieder hineinschreibe.
Ich glaube der gesamte Quelltext würde hier den Rahmen sprengen aber ich schneide gleich nochmal die wichtigen Zeilen raus und hänge diese an.
Als Hinweis. Die App funktionierte vorher ohne die Rechenwegsanzeige. Nun wollte ich diese gerne einfügen. Wenn ich wichtige Details ausgelassen habe dann fragt bitte danach.
Code:
public void onClickButtongleich(View view)
{
try{
if(gleichzweimal == false)
{
Zahl2=Double.parseDouble(Anzeige.getText().toString());//Zahl 2 aus Anzeige lesen
Formelanzeigen.setText(Formelanzeigen.getText().toString() + " " + kommanullentfernen(Anzeige.getText().toString())); // Zahl 2 in Formelanzeige anzeigen (funktoniert ohne Probleme)
}
else
{
Zahl1=Double.parseDouble(Anzeige.getText().toString()); //Anzeige Zahl 1
AnzahlZeilenFormelauslesen(); //Anzahl der Zeile auslesen da nur 4 Zeiler erlaubt sind und dann eventuell kürzen
Formelanzeigen.setText(Formelanzeigen.getText().toString() + System.getProperty("line.separator")); // Neue Zeile in der Formelanzeige einfügen
//----------------Problem hier :------------------------------------------
String Wert = Double.toString(Zahl2); //Double Wert in String umwandeln
//Kompletten Rechenweg anzeige lassen( (aktuellen text mit anhängen) + (Anzeige auslesen(Zahl1) und aus "5.0" "5" machen)+ Leerzeile + rechenoperator + (Zahl2 und aus "5.0" "5" machen funktoniert nicht!!!)
Formelanzeigen.setText(Formelanzeigen.getText().toString() + kommanullentfernen(Anzeige.getText().toString()) + " " + findeRechenoperator(rechenoperator) + " " + kommanullentfernen(zwischenspeicher));
//----------------Problem ende--------------------------
}
switch(rechenoperator) // Rechenoperator auswählen und dann rechnen
{
case 1:
Ergebnis = Zahl1+Zahl2;
break;
case 2:
Ergebnis = Zahl1-Zahl2;
break;
case 3:
Ergebnis = Zahl1*Zahl2;
break;
case 4:
Ergebnis = Zahl1/Zahl2;
break;
default:
new AlertDialog.Builder(this).setMessage("Fehler: Es wurde kein Rechenoperator ausgewählt").setNeutralButton("Zurück", null).show();
break;
}
Anzeige.setText(String.valueOf(Ergebnis)); //Ergebnis anzeigen
long temp = (long) Ergebnis; //hier das gleiche Problem wie oben (long ist keine lösung da auch komma Zahlen vorkommen können)
//Den Wert aus der Anzeige auslesen funktoniert auch nicht
Formelanzeigen.setText(Formelanzeigen.getText().toString() + " = " + kommanullentfernen(String.valueOf(temp)));
runden(); //Runden der Zahl auf die Stelle die in den Einstellungen angebenen ist.
kommanullentfernen(); // aus "10.0" "10" machen
textanpassen(); // Textgröße der länge anpassen
nachdemrundennullenweg(); //überflüssige Nullen nach dem Runden und hinter dem Komma entfernen
gleichzweimal = true;
rechenoperationenohnegleich = false;
}
catch(NumberFormatException ex)
{
new AlertDialog.Builder(this).setMessage("Fehler: Zahl enthält ungültige Zeichen.(" + Anzeige.getText().toString()+ ")").setNeutralButton("Zurück", null).show();
}
if(Anzeige.getText().toString() == "Infinity" )
{
Anzeige.setText("0");
new AlertDialog.Builder(this).setMessage("Durch Null geteilt").setNeutralButton("Zurück", null).show();
}
if(Anzeige.getText().toString() == "NaN")
{
Anzeige.setText("0");
new AlertDialog.Builder(this).setMessage("Fehlerhafte Rechnung").setNeutralButton("Zurück", null).show();
}
Gruß Thomas
Zuletzt bearbeitet: