2017-12-31 41 views
0

私は自分でJavaを勉強していますが、領域を計算するアプリケーションを作成していますが、1桁の数字を入力すると何も入れていません。しかし、それは小数と2桁の数字で動作します。なぜこのことが起こっているのか理解できる人はいませんか?それはコードです: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、どのように "アプリは言う"? logcatでエラーが見つかりましたか?その場合は、スニペットをここに貼り付けてください。おかげで.br – statosdotcom

+0

あなたの問題は 'F​​loat.parseFloat'と関係していると思います。 1桁の数字を使用するときにラウンドがどのように行われたかを調べます。フロートである必要がありますか?テスト目的のために他のタイプを使用することはできませんか?あなたがしていることは、 '.0'のようなものを追加するのと同じように、この解析の前に1桁のデータを"フォーマット処理 "することです。試してみるオプションの場合です。 – statosdotcom

答えて

1

String.matchesのjavaは正規表現です。だからmatches(".")は任意の1桁の文字列に一致します(。は正規表現のワイルドカードです)。リテラル文字列"."と一致させる場合は、matches("\.")

+0

私はそれを試みたが、それでも動作しなかった、それはエラーを示す: "文字列リテラルの不正なエスケープ文字" –

0

を使用します。EditText Textの長さを使用します。 matches()は正規表現用です。

0

使用する必要がありますeditText.getText().toString().contains("What ever you want")

+0

それはまだ動作していません –

関連する問題