EditBox auf Wert null prüfen und dann mit dem Wert rechnen

  • Antworten:12
  • Bentwortet
Hans M.
  • Forum-Beiträge: 32

25.05.2017, 22:25:55 via Website

Hallo

Ich habe eine App programmiert und komme nicht weiter. Ich habe 3 EditBoxen und wenn in der 1.EditBox nicht's steht soll er die Werte aus den anderen EditBoxen auslesen und eine Rechnung durchführen dabei starte ich eine if-Abfrage, weil wenn in der 1.EditBox nicht's steht soll was anderes gerechnet werden als in den anderen EditBoxen. Aber das Programm stürzt immer ab wenn ich auf den Knopf zum ausrechnen drücke.

Hier mein Code:

package com.example.user.app;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class RechnerActivity extends AppCompatActivity {

private TextView ergebnis;
private TextView gesucht;
private EditText vtext;
private EditText gtext;
private EditText ttext;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_rechner);
    setTitle("Taschenrechner");

    if (getSupportActionBar() != null) {
        getSupportActionBar().setDisplayShowHomeEnabled(true);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    }

    ergebnis = (TextView) findViewById(R.id.ergebnis);
    gesucht = (TextView) findViewById(R.id.gesucht);
    vtext = (EditText) findViewById(R.id.v);
    gtext = (EditText) findViewById(R.id.g);
    ttext = (EditText) findViewById(R.id.t);


    Button rechner = (Button) findViewById(R.id.rechnen);

    rechner.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String vs = vtext.getText().toString();
            String gs = gtext.getText().toString();
            String ts = ttext.getText().toString();
            float ges = Float.parseFloat(vtext.getText().toString());
            float erd = Float.parseFloat(gtext.getText().toString());
            float zeit = Float.parseFloat(ttext.getText().toString());
            float total;

            if (vs.equals("")) {
                gesucht.setText("v=?");
                total = erd * zeit;
                ergebnis.setText(Float.toString(total));
            } else if (gs.equals("")) {
                gesucht.setText("g=?");
                total = ges / zeit;
                ergebnis.setText(Float.toString(total));
            } else if (ts.equals("")) {
                gesucht.setText("t=?");
                total = ges / erd;
                ergebnis.setText(Float.toString(total));
            }
        }
    });


}


@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();

    if (id == android.R.id.home){
        finish();
    return super.onOptionsItemSelected(item);
    }
    if (id == R.id.action_settings){
        Intent intent = new Intent(RechnerActivity.this,SettingActivity.class);
        startActivity(intent);
        return true;
    }
    else if (id == R.id.action_uberuns){
        Intent intent = new Intent(RechnerActivity.this,UberunsActivity.class);
        startActivity(intent);
    }
    return super.onOptionsItemSelected(item);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_setting,menu);
    return super.onCreateOptionsMenu(menu);
}

}

Könntet ihr mir helfen?

Vielen Dank im voraus

— geändert am 26.05.2017, 20:31:41

Antworten
swa00
  • Forum-Beiträge: 3.704

25.05.2017, 22:32:49 via Website

Hallo Hans,

float ges = Float.parseFloat(vtext.getText().toString());
if (ges == 0.0F) // Fehler

Liebe Grüße - Stefan
[ App - Entwicklung ]

Hans M.Pascal P.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

25.05.2017, 22:33:23 via App

Hallo Hans!

Ich habe deinen Thread mal in den passenden Bereich verschoben. ;)

LG Pascal //It's not a bug, it's a feature. :) ;)

Hans M.

Antworten
Hans M.
  • Forum-Beiträge: 32

25.05.2017, 22:38:13 via Website

swa00

Hallo Hans,

float ges = Float.parseFloat(vtext.getText().toString());
if (ges == 0.0F) // Fehler

Ich habe leider nicht verstanden was du mir damit sagen willst.

Antworten
swa00
  • Forum-Beiträge: 3.704

25.05.2017, 22:43:49 via Website

Hallo Hans,

na du ermittels den Wert eines Textfeldes in einen Flieskommawert

Und wenn diese Variable 0 ist , dann machst du das , was in einem Fehler zu tun ist .
Was du möchtest , vermag ich nicht zu beurteilen

Liebe Grüße - Stefan
[ App - Entwicklung ]

Hans M.

Antworten
Hans M.
  • Forum-Beiträge: 32

25.05.2017, 22:50:58 via Website

Nein ich glaube du hast mich falsch verstanden. Ich will prüfen ob überhaupt was in der Editbox steht wenn in der EditBox nicht's steht, soll er die jeweilige Rechnung durchführen.

Antworten
swa00
  • Forum-Beiträge: 3.704

25.05.2017, 23:00:37 via Website

Anstatt

float ges = Float.parseFloat(vtext.getText().toString());

z.B.

String gesStr = vtext.getText().toString();
if ((gesStr.isEmpty()) || (gesStr == null))
{
// Nix drin
}
else
{
float ges = Float.parseFloat(gesStr);
}

Damit ein Programm nicht abstürzt , solltest Du dir mal Try / catch anschauen und Fehler
abfangen.
Ich vermute z.b. bei dir einen Devide by Zero

— geändert am 26.05.2017, 08:34:01

Liebe Grüße - Stefan
[ App - Entwicklung ]

Antworten
Hans M.
  • Forum-Beiträge: 32

26.05.2017, 15:57:30 via Website

Danke für den Tipp. Jetzt stürzt meine App zwar nicht ab, aber er führt die Rechnung immer noch nicht durch.

Hier der jetzige Code:

public class RechnerActivity extends AppCompatActivity {

private TextView ergebnis;
private TextView gesucht;
private EditText vtext;
private EditText gtext;
private EditText ttext;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_rechner);
    setTitle("Taschenrechner");

    if (getSupportActionBar() != null) {
        getSupportActionBar().setDisplayShowHomeEnabled(true);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    }

    ergebnis = (TextView) findViewById(R.id.ergebnis);
    gesucht = (TextView) findViewById(R.id.gesucht);
    vtext = (EditText) findViewById(R.id.v);
    gtext = (EditText) findViewById(R.id.g);
    ttext = (EditText) findViewById(R.id.t);


    Button rechner = (Button) findViewById(R.id.rechnen);

    rechner.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String gesStr = vtext.getText().toString();
            String erdStr = gtext.getText().toString();
            String zeitStr = ttext.getText().toString();



            if((gesStr.isEmpty()) || (gesStr == null)) {

            }
            else {
                float ges = Float.parseFloat(vtext.getText().toString());
                float erd = Float.parseFloat(gtext.getText().toString());
                float zeit = Float.parseFloat(ttext.getText().toString());
                float total;


                    gesucht.setText("v=?");
                    total = erd * zeit;
                    ergebnis.setText(Float.toString(total));

            }

            //if (gesStr.equals("")) {
              //  gesucht.setText("v=?");
                //total = erd * zeit;
                //ergebnis.setText(Float.toString(total));
            //} else if (gs.equals("")) {
              //  gesucht.setText("g=?");
                //total = ges / zeit;
                //ergebnis.setText(Float.toString(total));
            //} else if (ts.equals("")) {
              //  gesucht.setText("t=?");
                //total = ges / erd;
                //ergebnis.setText(Float.toString(total));
           // }
        }
    });


}


}

Das mit dem Try / catch habe ich mir angeguckt, aber leider nicht ganz verstanden wie ich das machen soll.

— geändert am 26.05.2017, 16:03:52

Antworten
Hans M.
  • Forum-Beiträge: 32

26.05.2017, 20:32:50 via Website

Ich habe die Frage nochmal anders formuliert. Vielleicht versteht ihr es so besser.

Antworten
swa00
  • Forum-Beiträge: 3.704

26.05.2017, 20:55:00 via Website

Hallo Hans,

a) warum machst du nur eine Validierung bei "ges" und nicht auch bei "erd" & "zeit" ?
b) im ClickLIstener benutzt du "ges" gar nicht, es ist quasi sinnlos da dann eine Validierung durchzuführen
c) warum gibts du vor der Berechnung was in "gesucht" aus ??
d) Im Clicklistener ermittelst du zweimal den Inhalt der Editfelder, hat das einen Zweck ?

Dein komplettes Handling von Ermittlung der Eingabe , umwandeln in Float und dann
die entsprechende Berechnung und auch Ausgabe macht überhaupt keinen Sinn.

Anmerkung : Bitte nicht übel nehmen :

Kann es sein , dass dir enorme Grundlagen in der Programmierung fehlen ?
Wir bewegen und hier nämlich mit deinen Fragen auf low level / beginner niveau

Das Forum hilft immer sehr sehr gerne , wenn es mal zwickt , aber Grundlagen können
wir nicht lehren. Das wäre dann der falsche Platz und würde den Rahmen sprengen.

— geändert am 26.05.2017, 21:14:09

Liebe Grüße - Stefan
[ App - Entwicklung ]

Antworten
Hans M.
  • Forum-Beiträge: 32

26.05.2017, 21:37:58 via Website

a) Ich habe es zuerst nur mit ges gemacht um zu gucken ob es funktioniert. Wenn es funktioniert mache ich es auch mit den anderen
b) "ges" will ich später im Programm benutzen
c) Ich habe 3 EditBoxen. In 2 EditBoxen gebe ich die Werte ein, also was gegeben ist und in der EditBox in der nichts steht die ist gesucht deswegen geben ich den Text bei "gesucht" aus.
d) Ich will ja prüfen ob was in der EditBox steht, deswegen mache ich es zu einem String um in der if-Abfrage zu prüfen ob was drin steht und ich will ja aus den 2 anderen EditBoxen die Werte auslesen um dann mit den Werten eine jeweilige Rechnung durchführen deswegen wandele ich es nochmal in float um. Ich habe keine bessere Lösung gefunden. Vielleicht hast du ja eine bessere Idee?

Antworten
swa00
  • Forum-Beiträge: 3.704

26.05.2017, 21:50:05 via Website

Hans dann tue uns mal bitte einen gefallen und stelle deinen Code erst mal fertig
und poste mal nur den OnClickListener part.

Wenn wir dir helfen sollen , dann müssen wir auch wissen wie es aussieht und nicht wie es mal
aussehen könnte.

Und vor dem Posten gehst du mal mit dem Debugger durch ( Breakpoint setzen) und
schaust dir mal selbst die Daten an. Dafür ist der auch eingebaut.

Das ist eines der wichtigsten Tools für Entwickler

Liebe Grüße - Stefan
[ App - Entwicklung ]

Hans M.

Antworten
Hans M.
  • Forum-Beiträge: 32

26.05.2017, 23:19:42 via Website

Ich habe mein Problem gelöst das Problem lag darin das ich mit der Methode die ich versucht habe es nicht geht habe jetzt aber eine Lösung gefunden wie man einen String in ein Integer umwandelt und zwar:
float erd = Integer.parseInt(erdStr);

Aber danke noch mal für eure mühe und Geduld.

Antworten