如果没有给出答案,应用程序会崩溃



我的应用程序是定时数学游戏。在计时器用完之前,请尽可能多地回答问题。当时间用完时,游戏实行性现在是当前活动。我已经意识到,如果我没有给出答案,该应用将崩溃。如果我给出至少1个答案,则该应用不会崩溃,并且一切正常。我不确定我的代码中的缺陷在哪里。

这是主要活动

package stormy.incremental.randomtest;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.util.Random;
public class FastMathActivity extends AppCompatActivity {
    int rand1, rand2, randDecider, correctAnswer, falseAnswer, problemsSolved;
    String response,sumStr;
    MyCountDownTimer myCountDownTimer;
    int score;
    Random r;
    TextView randTV1, randTV2, scoreTV, sumTV, problemsSolvedTV, timerTV;
    Button choice1, choice2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_random_test);
        problemsSolved =0;
        falseAnswer = 1;
//Initializing TextViews
        timerTV = ((TextView) findViewById(R.id.timer));
        randTV1 = ((TextView) findViewById(R.id.rand1));
        randTV2 = ((TextView) findViewById(R.id.rand2));
        sumTV = ((TextView) findViewById(R.id.sum));
        scoreTV = ((TextView) findViewById(R.id.score));
        problemsSolvedTV = ((TextView) findViewById(R.id.problemsSolved));
        choice1 = ((Button) findViewById(R.id.choice1));
        choice2 = ((Button) findViewById(R.id.choice2));
//Initializing a Random
        r = new Random();
//Set the first question
        setRandomProblem();
//Starting the timer
        myCountDownTimer = new MyCountDownTimer(timerTV, 5000, 1000);
        myCountDownTimer.start();
// Button Listeners
        choice1.setOnClickListener(new Button.OnClickListener() {
            @Override
            public void onClick(View v) {

              checkResponse((Button)v);
              setRandomProblem();
            }
        });
        choice2.setOnClickListener(new Button.OnClickListener() {
            @Override
            public void onClick(View v) {
                checkResponse((Button)v);
                setRandomProblem();
            }
        });
    }
    public void checkResponse(Button v) {

//Convert the response and correctAnswer to String in order to compare values
        response = v.getText().toString();
        sumStr = Integer.toString(correctAnswer);
//If the user clicks the correct answer, increment score
        if ((response.equals(sumStr))) {
            score++;
            scoreTV.setText(score+"");
          }
//Increment the total amount of problems solved
        problemsSolved++;
        problemsSolvedTV.setText(problemsSolved+"");
//Keep track of the score within the timer
        myCountDownTimer.recordScore(score,problemsSolved);
    }
    private void setRandomProblem() {
//Assigning random values to ints
        rand1 = r.nextInt(5 - 1) + 1;
        rand2 = r.nextInt(5 - 1) + 1;
        randDecider = r.nextInt(2) + 1;
//The correctAnswer of the randoms
        correctAnswer = rand1 + rand2;
//Setting the texts of the random values
        randTV1.setText(rand1 + "");
        randTV2.setText(rand2 + "");
//If the random deciding number is 1, set answer on choice1
        if (randDecider == 1) {
            choice1.setText(correctAnswer + "");
            choice2.setText(correctAnswer + falseAnswer + "");
        }
        //If the random deciding number is 2, set answer on choice2
        else {
            choice1.setText(correctAnswer + falseAnswer + "");
            choice2.setText(correctAnswer + "");
        }
    }
    @Override
    public void onStop(){
        super.onStop();
//Stop the timer
        myCountDownTimer.cancel();
    }
    }

这是游戏性

package stormy.incremental.randomtest;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
/**
 * Created by kamalu on 12/25/2017.
 */
public class GameOverActivity extends AppCompatActivity {
    TextView scoreTV, problemsSolvedTV, percentageTV;
    int score, problemsSolved, percentage;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.gameover);
//Initializing TextViews
        scoreTV = ((TextView)findViewById(R.id.score));
        problemsSolvedTV = ((TextView)findViewById(R.id.problemsSolved));
        percentageTV = ((TextView)findViewById(R.id.percentage));
//Opening Bundle and assigning values
        Bundle extras = getIntent().getExtras();
        score = extras.getInt("score");
        problemsSolved = extras.getInt("problemsSolved");
//calculating the accuracy
       percentage = (score/problemsSolved)*100;
//Displaying the score
        percentageTV.setText(percentage+"");
        scoreTV.setText(score+"");
        problemsSolvedTV.setText(problemsSolved+"");
    }
//Start the game over
    public void retry(View v){
        Intent retryIntent = new Intent(GameOverActivity.this, FastMathActivity.class);
        startActivity(retryIntent);
    }
    public void onBackPressed()
    {
    }
}

这是计时器。我认为重要的是要注意,此类中的onfinish()方法启动了游戏性。

package stormy.incremental.randomtest;
import android.content.Intent;
import android.os.CountDownTimer;
import android.widget.TextView;

public class MyCountDownTimer extends CountDownTimer {
TextView textCounter;
int score,problemsSolved;
public MyCountDownTimer(TextView textCounter, long millisInFuture, long countDownInterval) {
    super(millisInFuture, countDownInterval);
    this.textCounter = textCounter;
}
@Override
public void onTick (long millisUntilFinished){
    textCounter.setText(String.valueOf(millisUntilFinished / 1000));
}
@Override
public void onFinish () {
       Intent gameOverIntent = new Intent(textCounter.getContext(), GameOverActivity.class);
       gameOverIntent.putExtra("score", score);
       gameOverIntent.putExtra("problemsSolved", problemsSolved);
       textCounter.getContext().startActivity(gameOverIntent);
}
//Keep track of the scores
    public void recordScore(int score,int problemsSolved){
    this.problemsSolved = problemsSolved;
    this.score = score;
    }
}

您应该检查:

//calculating the accuracy
percentage = (score/problemsSolved)*100;

如果QualiseSolved = 0,您的应用将随exeptions崩溃:java.lang.ArithmeticException您可以参考:

if (problemSolved != 0){
    //calculating the accuracy
    percentage = (score/problemsSolved)*100;
} else {
    // handle with problemSolved = 0;
}

我希望它可以帮助您的问题!

最新更新