2017-12-31 26 views
0

Ich studiere Java auf eigene Faust und ich erstelle eine App, die Bereiche berechnet, aber wenn ich eine 1-stellige Nummer eingeben, sagt die App, dass ich nichts gestellt habe. Aber es funktioniert mit Dezimalzahlen und zweistelligen Zahlen. Kann mir jemand helfen, herauszufinden, warum das passiert? Das ist der Code:Probleme bei der Bearbeitung von Text mit Zahlen in Java

public void calcRetangulo (View view){ 
    EditText compRet = (EditText) findViewById(R.id.compRetangulo); 
    EditText ladoRet = (EditText) findViewById(R.id.ladoRetangulo); 

    if (compRet.getText().toString().matches("") || compRet.getText().toString().matches(".") && ladoRet.getText().toString().matches("") || ladoRet.getText().toString().matches(".")){ 

     LayoutInflater er = getLayoutInflater(); 

     View erro = er.inflate(R.layout.erro, null); 

     erro.findViewById(R.id.ok).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

       alertaErro.dismiss(); 
      } 
     }); 

     AlertDialog.Builder builderErro = new AlertDialog.Builder(this); 
     builderErro.setView(erro); 
     alertaErro = builderErro.create(); 
     alertaErro.show(); 

     compRet.setText(""); 
     ladoRet.setText(""); 

    } else{ 

     float comp = Float.parseFloat(compRet.getText().toString()); 
     float lado = Float.parseFloat(ladoRet.getText().toString()); 

     float area = comp * lado; 

     LayoutInflater li = getLayoutInflater(); 

     View result = li.inflate(R.layout.layout, null); 
     final TextView resultado = (TextView) result.findViewById(R.id.resultado); 

     resultado.setText(String.format("A = c x l\nA = "+ comp +" x " + lado +"\nA = "+ area)); 

     result.findViewById(R.id.fechar).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

       alertaResult.dismiss(); 
       resultado.setText(""); 

      } 
     }); 

     AlertDialog.Builder builderResult = new AlertDialog.Builder(this); 
     builderResult.setView(result); 
     alertaResult = builderResult.create(); 
     alertaResult.show(); 

     compRet.setText(""); 
     ladoRet.setText(""); 
    } 
} 
+0

Vini, wie "die App sagt"? Finden Sie Fehler auf dem Logcat? Wenn ja, bitte fügen Sie hier einen Auszug für uns ein. Danke von .br – statosdotcom

+0

Ich denke, dein Problem hat mit 'Float.parseFloat' zu tun. Untersuchen Sie, wie die Runde ausgeführt wird, wenn Sie sie mit einer einstelligen Zahl verwenden. Muss es ein Float sein? Können Sie nicht einen anderen Typ nur zu Testzwecken verwenden? Was Sie tun können, ist eine "Formatbehandlung" für die einstelligen Daten vor diesem Parsing, etwa das Hinzufügen von etwas wie ".0" ... weiß nicht. Es ist der Fall, Optionen zu versuchen. – statosdotcom

Antwort

1

String.matches in Java ist ein regulärer Ausdruck. So wird matches(".") jede 1-stellige Zeichenfolge (. Ist ein Platzhalter in Regex) übereinstimmen. Wenn Sie die literale Zeichenfolge "." abgleichen möchten, verwenden Sie matches("\.")

+0

Ich habe es so versucht, aber es hat immer noch nicht funktioniert, es zeigt diesen Fehler: "Illegal Escape-Zeichen in String-Literal" –

0

Verwenden Sie die Länge des EditText Text. matches() ist für Regex-Ausdruck.

0

sollten Sie verwenden editText.getText().toString().contains("What ever you want")

+0

Es funktioniert immer noch nicht –

Verwandte Themen