2017-11-27 2 views
0

Ich bin neu in Android Studio und habe eine Taschenrechner-App, die ich arbeite. Gerade jetzt, wenn ich durch Null dividiere, bekomme ich natürlich die Fehlermeldung "Infinity", aber was, wenn ich es ändern wollte, um zu sagen: "Konnte nicht durch Null teilen", wie würde ich darüber gehen?Android-Rechner Fehlermeldung beim Teilen von 0

enter image description here

import android.os.Bundle; 
    import android.support.design.widget.FloatingActionButton; 
    import android.support.design.widget.Snackbar; 
    import android.support.v7.app.AppCompatActivity; 
    import android.support.v7.widget.Toolbar; 
    import android.view.View; 
    import android.widget.Button; 
    import android.widget.EditText; 
    import android.widget.TextView; 

    public class Divisionpage extends AppCompatActivity implements View.OnClickListener { 
     private Button btnDiv; 
     private TextView AnswDiv; 
     private EditText Divt1, Divt2; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_divisionssida); 
      init(); 
      Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
      setSupportActionBar(toolbar); 

      FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
      fab.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
          .setAction("Action", null).show(); 
       } 
      }); 
     } 

     private void init() { 
      btnDiv = (Button)findViewById(R.id.btnDiv); 
      AnswDiv = (TextView)findViewById(R.id.AnswDiv); 
      Divt1 = (EditText)findViewById(R.id.Divtal1); 
      Divt2 = (EditText)findViewById(R.id.Divtal2); 
      btnDiv.setOnClickListener(this); 
     } 

     @Override 
     public void onClick(View v) { 
      String num7 = Divt1.getText().toString(); 
      String num8 = Divt2.getText().toString(); 
      switch (v.getId()){ 
       case R.id.btnDiv: 
        try { 
         float division = Float.parseFloat(num7)/Float.parseFloat(num8); 
         AnswDiv.setText(String.valueOf(division)); 
        }catch (Exception e) { 
         AnswDiv.setText("Could not divide!"); 
        } 
        break; 
      } 
     } 
    } 

Ich versuchte, die Ausnahme abfangen eine Fehlermeldung angezeigt werden, wie Sie aber es versäumt sehen. Was schlägst du vor?

Antwort

0

Nun, Sie könnten tatsächlich Num8 Wert überprüfen und wenn seine 0 die richtige Nachricht einstellen.

@Override 
    public void onClick(View v) { 
     String num7 = Divt1.getText().toString(); 
     String num8 = Divt2.getText().toString(); 
     switch (v.getId()){ 
      case R.id.btnDiv: 
       try { 
        final float denominator = Float.parseFloat(num8); 
        if(denominator == 0){ 
         AnswDiv.setText("Can't divide by zero"); 
         return; 
        } 
        float division = Float.parseFloat(num7)/Float.parseFloat(num8); 
        AnswDiv.setText(String.valueOf(division)); 
       }catch (Exception e) { 
        AnswDiv.setText("Could not divide!"); 
       } 
       break; 
     } 
    } 

Sie könnten weiter die Benutzererfahrung zu verbessern Ausnahmebehandlung verbessern, zum Beispiel: Sofern in den EditText MIME Benutzer beschränkt könnte nicht numerische Zeichen einführen. Wenn Sie versuchen, das Zeichen zu parsen, wird NumberFormatException ausgelöst, das in Ihrer Ausnahmeklausel gefangen wird und Ihre Nachricht festlegt. Dies, obwohl nicht falsch, kann verbessert werden, indem der Benutzer darüber informiert wird, dass nur numerische Zeichen gültig sind.

catch (NumberFormatException ex){ 
    AnswDiv.setText("Only numbers allowed!"); 
} 
+0

Danke, das hat den Trick gemacht. Ich möchte nur fragen, was ist der Punkt der Catch-Ausnahme in Ihrem Code, wenn diese spezifische Fehlermeldung nicht angezeigt wird ("Konnte nicht teilen!")? Entschuldigung, wenn es eine blöde Frage ist, aber ich lerne. – Rengaw

+0

catch (NumberFormatException ex) { AnswDiv.setText ("Nur Zahlen erlaubt!"); } ist für den Fall, dass Benutzer Buchstaben in Ihr Textfeld eingeben. Die Exception-Klausel ist nutzlos (es sei denn natürlich, dass AnswDiv null ist) –

+0

Auch wenn die Antwort das Problem lösen würde, würde es Ihnen etwas ausmachen, es anzunehmen? :) –

Verwandte Themen