2016-10-13 54 views
-1

需要用我的小测验数学帮助......写答案崩溃

当我运行仿真器的应用程序,它的的EditText(answerTxt)点击时崩溃。

我想在editTextbox中回答数学问题,在做完这些之后,我想单击按钮(button1)以查看它是否是正确的答案。如果是对的,我会得到1分。如果我回答这个问题,不管答案是对还是错,都会有一个新的问题。

package com.ebookfrenzy.mattespelet; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import java.util.Random; 

import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.EditText; 

public class PlayActivity extends AppCompatActivity implements OnClickListener { 
    private int level = 0, answer = 0, operator = 0, operand1 = 0, operand2 = 0; 
    private final int ADD_OPERATOR = 0, SUBTRACT_OPERATOR = 1, MULTIPLY_OPERATOR = 2, DIVIDE_OPERATOR = 3; 
    private String[] operators = {"+", "-", "x", "/"}; 

    private int[][] levelMin = { 
        {1, 11, 21}, 
        {1, 5, 10}, 
        {2, 5, 10}, 
        {2, 3, 5}}; 
    private int[][] levelMax = { 
        {10, 25, 50}, 
        {10, 20, 30}, 
        {5, 10, 15}, 
        {10, 50, 100}}; 

    private Random random; 


    private EditText answerTxt; 
    private TextView question, scoreTxt; 
    private Button enterBtn; 
    private ImageView response; 

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

     question = (TextView)findViewById(R.id.textView2); 
     answerTxt = (EditText) findViewById(R.id.answertxt); 
     enterBtn = (Button)findViewById(R.id.button1); 
     scoreTxt = (TextView)findViewById(R.id.score); 
     response = (ImageView)findViewById(R.id.response); 

     Bundle extras = getIntent().getExtras(); 
     if(extras != null) 
     { 
      int passedLevel = extras.getInt("level", -1); 
      if(passedLevel>=0) level = passedLevel; 
     } 

     random = new Random(); 

     chooseQuestion(); 
    } 

    private void chooseQuestion(){ 

     answerTxt.setText("= ?"); 

     operator = random.nextInt(operators.length); 
     operand1 = getOperand(); 
     operand2 = getOperand(); 

     if(operator == SUBTRACT_OPERATOR){ 
      while(operand2>operand1){ 
       operand1 = getOperand(); 
       operand2 = getOperand(); 
      } 
     } 
     else if(operator==DIVIDE_OPERATOR){ 
      while((((double)operand1/(double)operand2)%1 > 0) || (operand1==operand2)) 
      { 
       operand1 = getOperand(); 
       operand2 = getOperand(); 
      } 
     } 

     switch(operator) 
     { 
      case ADD_OPERATOR: 
       answer = operand1+operand2; 
       break; 
      case SUBTRACT_OPERATOR: 
       answer = operand1-operand2; 
       break; 
      case MULTIPLY_OPERATOR: 
       answer = operand1*operand2; 
       break; 
      case DIVIDE_OPERATOR: 
       answer = operand1/operand2; 
       break; 
      default: 
       break; 
     } 
     question.setText(operand1+" "+operators[operator]+" "+operand2); 
    } 
    private int getOperand(){ 
     return random.nextInt(levelMax[operator][level] - levelMin[operator][level] + 1) 
       + levelMin[operator][level]; 

    } 

    @Override 
    public void onClick(View view) 
    { 
     if(view.getId()==R.id.button1) { 
      String answerContent = answerTxt.getText().toString(); 
      if(!answerContent.endsWith("?")) 
      { 
       int enteredAnswer = Integer.parseInt(answerContent.substring(2)); 
       int exScore = getScore(); 

       if(enteredAnswer==answer){ 
        scoreTxt.setText("Score: "+(exScore+1)); 
        response.setImageResource(R.drawable.tick); 
        response.setVisibility(View.VISIBLE); 
        //correct 
       } 
      } 
      else { 
       scoreTxt.setText("Score: 0"); 
       response.setImageResource(R.drawable.cross); 
       response.setVisibility(View.VISIBLE); 
       //incorrect 
      } 
      chooseQuestion(); 
     } 
     else { 
      int number=Integer.valueOf(answerTxt.getText().toString()); ; 

      if(answerTxt.getText().toString().endsWith("?")) 
       answerTxt.setText("= "+number); 
      else 
       answerTxt.append(""+number); 
     } 
     response.setVisibility(View.INVISIBLE); 
    } 

    private int getScore(){ 
     String scoreStr = scoreTxt.getText().toString(); 
     return Integer.parseInt(scoreStr.substring(scoreStr.lastIndexOf(" ")+1)); 
    } 

} 

这里是错误...

10-13 20:39:05.993 4365-4399/com.ebookfrenzy.mattespelet E/Surface: getSlotFromBufferLocked: unknown buffer: 0xa9d15de0 
10-13 20:39:06.974 4365-4399/com.ebookfrenzy.mattespelet E/Surface: getSlotFromBufferLocked: unknown buffer: 0xb4056bb0 
10-13 20:39:07.885 4365-4365/com.ebookfrenzy.mattespelet D/Something: = ? 
10-13 20:39:07.886 4365-4365/com.ebookfrenzy.mattespelet D/AndroidRuntime: Shutting down VM 
10-13 20:39:07.886 4365-4365/com.ebookfrenzy.mattespelet E/AndroidRuntime: FATAL EXCEPTION: main 

Process: com.ebookfrenzy.mattespelet, PID: 4365 
java.lang.IllegalStateException: Could not execute method for android:onClick 
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293) 
    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.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
    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: "= ?" 
    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 java.lang.Integer.valueOf(Integer.java:525) 
    at com.ebookfrenzy.mattespelet.PlayActivity.onClick(PlayActivity.java:167) 
    at java.lang.reflect.Method.invoke(Native Method)  
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)  
    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)  

这是XML文件..

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.ebookfrenzy.mattespelet.PlayActivity" 
    android:background="#815959"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/textView2" 
     android:textSize="30sp" 
     android:layout_alignBottom="@+id/answertxt" 
     android:width="200dp" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:text="Räkna ihop" 
     android:id="@+id/textView5" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="60dp" 
     android:background="#fcfafa" /> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/kontrollera_button" 
     android:id="@+id/button1" 
     android:layout_marginBottom="79dp" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" /> 

    <EditText 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:inputType="number" 
     android:ems="10" 
     android:id="@+id/answertxt" 
     android:layout_centerVertical="true" 
     android:layout_toRightOf="@+id/textView5" 
     android:layout_toEndOf="@+id/textView5" 
     android:onClick="onClick" 
     /> 
    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:orientation="horizontal" 
     > 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:text="Score: 0" 
     android:id="@+id/score" 
     android:layout_alignParentTop="true" 
     android:layout_alignRight="@+id/answertxt" 
     android:layout_alignEnd="@+id/answertxt" 
     android:textSize="20sp" /> 

    <ImageView 
     android:id="@+id/response" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center|left" 
     android:layout_weight="1" 
     android:contentDescription="result" 
     android:src="@drawable/tick" 
     /> 
    </LinearLayout> 

</RelativeLayout> 
+1

'由于:java.lang.NumberFormatException:无效的int:“=?”'。我不确定为什么,但在答案框中有等号和问号。我会把它们放在他们自己的盒子里,或者将它们过滤出来,然后用'try/catch'包装,并且如果它捕获到一个'NumberFormatException'则执行一些操作。 – codeMagic

+0

由这行PlayActivity.java:167引起的错误。检查你的PlayActivity行167. –

+0

第167行是: int number = Integer.valueOf(answerTxt.getText()。toString()); ; 不知道用什么来代替它 – soffman

回答

1

您的应用程序错误的,因为你正试图解析字符串值作为整数

+0

是的,它似乎是问题所在。我不知道该用什么来代替它 – soffman

0

线167引起的错误:

int enteredAnswer = Integer.parseInt(answerContent.substring(2)); 

认为您应该考虑可能性,该用户可以将editBox留空或输入非数字值。为此,您应该捕获NumberFormatException:

try { 
    int enteredAnswer = Integer.parseInt(answerContent.substring(2)); 
} catch (NumberFormatException nfe) { 
    // cannot parse integer, notify about wrong anser 
    .. 
} 
+0

不知道在哪里放置代码。试图切换它: int number = Integer.valueOf(answerTxt.getText()。toString()); ; – soffman

+0

但无法解析符号:answerContent 我应该保留什么以及应该删除哪些内容? Thx的帮助.... – soffman

+0

仍然是同样的问题.... 'java.lang.IllegalStateException:无法执行android的方法:onClick' 'at com.ebookfrenzy.mattespelet.PlayActivity.onClick(PlayActivity 'java:166)' Lina 166是* int enteredAnswer = Integer.parseInt(answerContent.substring(2));' – soffman