当两次按下等号按钮时,计算器应用程序崩溃

问题描述:

我正在修改计算器应用程序。该应用程序正常执行所有操作,但是当我点击等号按钮两次时,应用程序崩溃。当两次按下等号按钮时,计算器应用程序崩溃

在我的layout中,我使用了android:onClick ="clicaBotao"来执行操作的所有按钮,包括等号按钮。

在MainActivity下面用clicaBotao方法。

public class MainActivity extends AppCompatActivity { 

private TextView campoTexto; 
float numeroA = 0; 
String operacao = ""; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    campoTexto = (TextView)findViewById(R.id.campoResultado); 
    campoTexto.setText("0"); 
} 

public void clicaBotao(View view){ 
    switch (view.getId()){ 
     case R.id.botaoClear: 
      campoTexto.setText("0"); 
      numeroA=0; 
      operacao=""; 
      break; 
     case R.id.botaoSoma: 
      calculaNumeros("+"); 
      break; 
     case R.id.botaoSubtrai: 
      calculaNumeros("-"); 
      break; 
     case R.id.botaoDivide: 
      calculaNumeros("/"); 
      break; 
     case R.id.botaoMultiplica: 
      calculaNumeros("*"); 
      break; 
     case R.id.botaoIgual: 
      mostraResultado(); 
      break; 
     default : 
      String numb; 
      numb = ((Button)view).getText().toString(); 
      getKeyboard(numb); 
      break; 
    } 
} 


public void calculaNumeros(String tipoOperacao){ 
    numeroA = Float.parseFloat(campoTexto.getText().toString()); 
    operacao = tipoOperacao; 
    campoTexto.setText("0"); 
} 


public void getKeyboard(String str) 
{ 
    String ScrCurrent = campoTexto.getText().toString(); 
    ScrCurrent += str; 
    campoTexto.setText(ScrCurrent); 
} 


public void mostraResultado() 
{ 
    float numeroB = Integer.parseInt(campoTexto.getText().toString()); 
    float result = 0; 
    if(operacao.equals("+")) 
    { 
     result = numeroB + numeroA; 
    } 
    if(operacao.equals("-")) 
    { 
     result = numeroA - numeroB; 
    } 
    if(operacao.equals("*")) 
    { 
     result = numeroB * numeroA; 
    } 
    if(operacao.equals("/")) 
    { 
     result = numeroA/numeroB; 
    } 
    campoTexto.setText(String.valueOf(result)); 
    } 
} 

logcat的

01-13 08:43:58.775 3761-3761/titopetri.com.minhacalculadora E/AndroidRuntime: FATAL EXCEPTION: main 
Process: titopetri.com.minhacalculadora, PID: 3761 
java.lang.IllegalStateException: Could not execute method for android:onClick 
    at android.support.v7.internal.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:278) 
    at android.view.View.performClick(View.java:5198) 
    at android.view.View$PerformClick.run(View.java:21147) 
    at android.os.Handler.handleCallback(Handler.java:739) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5417) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
Caused by: java.lang.reflect.InvocationTargetException 
    at java.lang.reflect.Method.invoke(Native Method) 
    at android.support.v7.internal.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:273) 
    at android.view.View.performClick(View.java:5198) 
    at android.view.View$PerformClick.run(View.java:21147) 
    at android.os.Handler.handleCallback(Handler.java:739) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5417) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
Caused by: java.lang.NumberFormatException: Invalid int: "14.0" 
    at java.lang.Integer.invalidInt(Integer.java:138) 
    at java.lang.Integer.parse(Integer.java:410) 
    at java.lang.Integer.parseInt(Integer.java:367) 
    at java.lang.Integer.parseInt(Integer.java:334) 
    at titopetri.com.minhacalculadora.MainActivity.mostraResultado(MainActivity.java:76) 
    at titopetri.com.minhacalculadora.MainActivity.clicaBotao(MainActivity.java:48) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at android.support.v7.internal.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:273) 
    at android.view.View.performClick(View.java:5198) 
    at android.view.View$PerformClick.run(View.java:21147) 
    at android.os.Handler.handleCallback(Handler.java:739) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5417) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
+0

您可以添加错误代码? – Mackovich

+0

请添加您的错误日志,以便我们可能会发现您的错误 – AnswerDroid

+1

这是错误:由于:java.lang.NumberFormatException:Invalid int:“14.0”'。这是一个浮动(或双) – Mackovich

替代方法mostraResultado()

float numeroB = Integer.parseInt(campoTexto.getText().toString()); 

通过

float numeroB = Float.parseFloat(campoTexto.getText().toString()); 
+0

工作! Tks =] –