2017-12-31 7 views
0

독자적으로 자바를 연구 중이며 면적을 계산하는 앱을 만들고 있지만 1 자리 숫자를 입력하면 앱에 아무 것도 넣지 않았다고 나와 있습니다. 그러나 십진법과 2 자리수로 작동합니다. 왜 이런 일이 일어나는지 알아낼 수 있습니까? 그 코드입니다 :자바에서 숫자로 텍스트 편집 사용 중 문제

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

당신의 문제는'Float.parseFloat'와 관련이 있다고 생각합니다. 한 자리 숫자와 함께 사용할 때 라운드가 어떻게 수행되는지 조사하십시오. 부유물이되어야합니까? 테스트 목적으로 다른 유형을 사용할 수 없습니까? 당신이 할 수있는 일은'.0'과 같은 것을 추가하는 것과 같이 파싱하기 전에 한 자리 데이터에 대한 "형식 처리"입니다 ... 모른다. 시도하는 경우입니다. – statosdotcom

답변

1

String.matches 자바에서 정규 표현식입니다. 따라서 matches(".")은 1 자리 문자열 (정규 표현식에서 와일드 카드)과 일치합니다. 리터럴 문자열 "."과 일치 시키려면 matches("\.")

+0

나는 그 방법을 시도했지만 여전히 작동하지 않는다. 오류를 보여준다 : "문자열 리터럴에 잘못된 이스케이프 문자가있다" –

0

EditText 텍스트의 길이를 사용하십시오. matches()는 정규 표현식입니다.

0

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

+0

여전히 작동하지 않는다. –