Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如果没有给出答案,应用程序将崩溃_Android - Fatal编程技术网

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

Android 如果没有给出答案,应用程序将崩溃,android,Android,我的应用程序是一个定时数学游戏。在计时器用完之前,回答尽可能多的问题。当时间用完时,GameOverActivity现在是当前活动。我意识到如果我不回答,应用程序就会崩溃。如果我给出至少一个答案,应用程序不会崩溃,一切正常。我不确定代码中的漏洞存在于何处 这是主要的活动 package stormy.incremental.randomtest; import android.support.v7.app.AppCompatActivity; import android.os.Bundle;

我的应用程序是一个定时数学游戏。在计时器用完之前,回答尽可能多的问题。当时间用完时,GameOverActivity现在是当前活动。我意识到如果我不回答,应用程序就会崩溃。如果我给出至少一个答案,应用程序不会崩溃,一切正常。我不确定代码中的漏洞存在于何处

这是主要的活动

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()方法启动GameOverActivity

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;
如果problemsSolved=0,您的应用程序将因以下异常而崩溃:
java.lang.arithmetricException
你可以参考:

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

我希望它能帮助你解决问题

什么错误导致崩溃?您已经给了我们很多代码,如果您至少能指出哪些代码行导致了错误,这将是很有帮助的。大多数人不会有耐心阅读所有内容。@Carcigenicate java.lang.arithmetricException:除以零。我猜这意味着如果没有给出答案,变量将是0,Java将无法前进。我怎样才能创建它?@LinuxOracleUser在问题中发布它,并完成堆栈跟踪。@LinuxOracleUser并在尝试除法之前检查变量是否包含0。