2013-06-18 6 views
0

글쎄, 내 첫 번째 안드로이드 애플 리케이션을 디버깅하고 내 프로그램에 문제가있는 메신저 ... 내 계산기 합계, 뺄셈, 곱셈 및 나누기 ... 그리고 마지막 작업 내 문제입니다 ... TextEdit을 사용하여 휴대 전화에 값을 입력 할 수 있지만 5를 3으로 나눌 때 예를 들어 응답은 부동이며 앱이 다운됩니다. 5.0 및 3.0을 사용하는 경우에만 작동합니다.계산기 float 변환

정수를 부동 소수로 변환하고 항상 부동 소수점에 응답합니까?

지금까지이

try { 
       firstNum = new BigDecimal(firstInput.getText().toString()); 
       firstFloat = firstNum.floatValue(); 
      } catch (NumberFormatException e) { 
       firstNum = null; 
      } 

      try { 
       secondNum = new BigDecimal(secondInput.getText().toString()); 
       secondFloat = secondNum.floatValue(); 
      } catch (NumberFormatException e) { 
       secondNum = null; 
      } 

은 "firstFloat = firstNum.floatValue();"... 내가 모든 작업에있어 무엇인가 및 "secondFloat = firstNum.floatValue();" 나는 내가 0.0을 사용하지 않는 한 늘 수레로 내 입력의 합이 방법은 "다른"을 입력 한 후 ... 포럼에

if (firstNum == null || secondNum == null) { 
       Toast.makeText(getApplicationContext(), "Insira Valores!", 
         Toast.LENGTH_SHORT).show(); 
      } else { 
       result.setText(firstNum.add(secondNum).toString()); 
      } 
     } 
    }); 

을 때까지 좋은 변환 ... 모든하는 방법을 보았다. .. "firstFloat"및 "secondFloat"를 사용하여 모든 작업을 수행 할 수 있습니까?

부문 :

div.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      try { 
       firstNum = new BigDecimal(firstInput.getText().toString()); 
      } catch (NumberFormatException e) { 
       firstNum = null; 
      } 

      try { 
       secondNum = new BigDecimal(secondInput.getText().toString()); 
      } catch (NumberFormatException e) { 
       secondNum = null; 
      } 

      if (firstNum == null || secondNum == null) { 
       Toast.makeText(getApplicationContext(), "Insira Valores!", 
         Toast.LENGTH_SHORT).show(); 
      } else { 
       BigDecimal div = firstNum.divide(secondNum).setScale(2, 
         BigDecimal.ROUND_HALF_EVEN); 
       result.setText(div.toString()); 

      } 
     } 
    }); 
+1

스택 트레이스를 게시 할 수 있습니까? –

+0

'secondFloat = firstNum.floatValue();'정말 원하는 것입니까? 'secondFloat = secondNum.floatValue();'를 대신하고 싶지 않으세요? –

+0

LOL ... 복사/붙여 넣기에서 가져온 것입니다 ... 'secondFloat = secondNum.floatValue();' –

답변

0

첫째 : 응용 프로그램 "충돌"(예외로 인해 종료) 및 스택에 도움을 요청 할 때마다 게시하기 전에 다음을 수행하십시오

는 첫째, 디버그 모드에서 실행하고 디버그 창에서 스택 추적을보십시오. Eclipse에서 Window \ Show View \ Debug로 이동하십시오. 당신은 문제의 원인을 밝히는 데 도움이됩니다 - 당신이 라인 27에서의 RuntimeException 거기에 볼 수 있습니다이 경우

Thread [<1> main] (Suspended (exception RuntimeException)) 
.... 
YourClass.yourMethod() line: 27 
... 

: 많은 경우에, 그것은 같은 것을 포함 할 것이다. 여전히 도움이 필요하고 질문을 게시해야 할 경우 스택 추적을 포함하고 어떤 줄이 27 행인지 지적하십시오.

코드에서 스택 추적이 실패를 나타내지 않으면 (즉, 스택 트레이스에있는 모든 것은 안드로이드 클래스이고 그 중 어느 것도 당신의 클래스는 아니다), 중단 점을 사용하여 프로그램이 실패한 곳을 찾아 낸다. 중단 점 설정에 대한 자세한 정보는 Eclipse 도움말을 참조하십시오. 또한 디버그 모드에있을 때 중단 점에 도달하면 마우스를 변수 위에 올려 놓고 그 값을 볼 수 있기 때문에이를 사용하여 프로그램 논리에 무엇이 잘못되었는지 파악할 수 있습니다.

질문하고 있습니다. 이것은 나를 위해 잘 작동합니다 :

BigDecimal firstNum = null, secondNum = null; 
float firstFloat = -1, secondFloat = -1; 

try { 
    firstNum = new BigDecimal("4"); 
    firstFloat = firstNum.floatValue(); 
    secondNum = new BigDecimal("3"); 
    secondFloat = secondNum.floatValue(); 
} catch (NumberFormatException e) { 
    e.printStackTrace(); 
} 
float a = firstFloat/secondFloat; 
tempview.setText(a + ""); 

부서를 수행하는 부분을 게시하지 않았으므로 사용자가 작동하지 않는 이유를 모르겠습니다. 그러나 관련 부분을 게시하는 대신, 직접 연결해 두는 것이 좋습니다. 프로그램의 다른 지점에 몇 가지 중단 점을 설정하고 디버그 한 다음 문제가 발생한 위치를 확인할 때 여러 변수의 값을 확인하면서 코드를 단계별로 실행합니다. 디버깅 과정을 배우는 것이이 질문에 대한 답보다 훨씬 유용 할 것입니다! 행운을 빕니다!

+0

당신 말이 맞아요. 나는 그걸 기억하고 있습니다. ... 아팠어요.) –

+0

CHARM! 고맙습니다!! Thansk이 내 첫 안드로이드 앱 버그 프리를 끝내도록 도와주었습니다. D –

+0

문제 없습니다. 안드로이드 개발로 정말 놀랐습니다. – DevOfZot