Java 第二场比赛后,琐事游戏的得分变得不准确

Java 第二场比赛后,琐事游戏的得分变得不准确,java,android,algorithm,Java,Android,Algorithm,我有一个小游戏,是10个定时问题。一个错误的答案应该是0分。正确答案应该是将20000毫秒中的剩余时间转换成100分的刻度 现在游戏在第一个游戏中运行。然后,如果用户继续玩第二次,则每个问题的分数将不正确。例如,错误答案的分数从1分到100分不等,正确答案有时得0分,有时总分错误。所以我猜在第二场比赛中,一些变量可能没有重置,所以这会导致积分有点偏离 我发布了所有处理算法的代码。我的问题是,无论用户在关闭应用程序之前玩了多少次,我如何让这些代码输出正确的答案 QuestionView.java

我有一个小游戏,是10个定时问题。一个错误的答案应该是0分。正确答案应该是将20000毫秒中的剩余时间转换成100分的刻度

现在游戏在第一个游戏中运行。然后,如果用户继续玩第二次,则每个问题的分数将不正确。例如,错误答案的分数从1分到100分不等,正确答案有时得0分,有时总分错误。所以我猜在第二场比赛中,一些变量可能没有重置,所以这会导致积分有点偏离

我发布了所有处理算法的代码。我的问题是,无论用户在关闭应用程序之前玩了多少次,我如何让这些代码输出正确的答案

QuestionView.java

public class QuestionView extends Activity  {

    int correctAnswers = 0;
    int wrongAnswers = 0;
    int answer = 0;
    int i = 0;

    long score = 0;

    long startTime = 20000;
    long interval = 1000;
    long points;

    boolean timerHasStarted = false;

    String category;

    Button answer1, answer2, answer3, answer4;
    TextView question, pointCounter, questionNumber, timeCounter, timeremaining;
    AdView adView;

    ArrayList<Question> queries;
    public static ArrayList<Long> pointsPerQuestion = new ArrayList<Long>(10);
    Timer cdTimer;

    ProgressBar bar;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.questionview);

        answer1 = (Button)findViewById(R.id.answer1);
        answer2 = (Button)findViewById(R.id.answer2);
        answer3 = (Button)findViewById(R.id.answer3);
        answer4 = (Button)findViewById(R.id.answer4);

        question = (TextView)findViewById(R.id.question);

        category = getIntent().getStringExtra("category");
        queries = getIntent().getParcelableArrayListExtra("queries");

        questionNumber = (TextView)findViewById(R.id.questionnumber);
        timeremaining = (TextView)findViewById(R.id.timeremaining);

        cdTimer = new Timer(startTime, interval);

        bar = (ProgressBar)findViewById(R.id.progressbar);
        bar.setIndeterminate(false);
        bar.setMax(20000);

        tracker.sendView("/QuestionView - Started Quiz");

        loadQuestion();
    }

    public void loadQuestion() {

        if(i == 10) {

            cdTimer.cancel();
            endQuiz();

        } else {

            if(!timerHasStarted) {
                cdTimer.start();
                timerHasStarted = true;
            } else {
                cdTimer.start();
                timerHasStarted = false;
            }

            answer = queries.get(i).getCorrectAnswer();

            question.setText(queries.get(i).getQuery());

            answer1.setText(queries.get(i).getA1());
            answer2.setText(queries.get(i).getA2());
            answer3.setText(queries.get(i).getA3());
            answer4.setText(queries.get(i).getA4());

            answer1.setOnClickListener(new OnClickListener() {
                public void onClick(View arg0) {
                    queries.get(i).setSelectedAnswer(0);
                    if(answer == 0) {
                        correctAnswers++;
                        correct();
                    } else {
                        wrongAnswers++;
                        incorrect();
                    }
                }
            });

            answer2.setOnClickListener(new OnClickListener() {
                public void onClick(View arg0) {
                    queries.get(i).setSelectedAnswer(1);
                    if(answer == 1) {
                        correctAnswers++;
                        correct();
                    } else {
                        wrongAnswers++;
                        incorrect();
                    }
                }
            });

            answer3.setOnClickListener(new OnClickListener() {
                public void onClick(View arg0) {
                    queries.get(i).setSelectedAnswer(2);
                    if(answer == 2) {
                        correctAnswers++;
                        correct();
                    } else {
                        wrongAnswers++;
                        incorrect();
                    }
                }
            });

            answer4.setOnClickListener(new OnClickListener() {
                public void onClick(View arg0) {
                    queries.get(i).setSelectedAnswer(3);
                    if(answer == 3) {
                        correctAnswers++;
                        correct();
                    } else {
                        wrongAnswers++;
                        incorrect();
                    }
                }
            });
        } 
    }

    public ArrayList<Question> getQueries() {
        return queries;
    }

    public static ArrayList<Long> getPointsPerQuestion() {
        return pointsPerQuestion;
    }

    public void correct() {
        pointsPerQuestion.add(points); 
        score = score + points;
        i++;
        loadQuestion();
    }

    public void incorrect() {
        long zero = 0;
        pointsPerQuestion.add(zero);
        i++;
        loadQuestion();
    }

    public class Timer extends CountDownTimer {

        public Timer(long startTime, long interval) {
            super(startTime, interval);
        }

        @Override
        public void onFinish() {
            points = 0;
            if(i >= 9) {
                cdTimer.cancel();
                pointsPerQuestion.add(points);
                endQuiz();
            } else {
                wrongAnswers++;
                incorrect();
            }
        }

        @Override
        public void onTick(long millisUntilFinished) {
            bar.setProgress((int) millisUntilFinished);
            points = millisUntilFinished / 200;
            timeremaining.setText("Score remaining: " + points);
            if(i < 10) {
                questionNumber.setText("Question " + (i + 1) + " of 10");
            }
        }
    }

    public void endQuiz() {
        Intent intent = new Intent(QuestionView.this, Results.class);
        intent.putExtra("correctAnswers", correctAnswers);
        intent.putExtra("wrongAnswers", wrongAnswers);
        intent.putExtra("score", score);
        intent.putExtra("pointsPerQuestion", pointsPerQuestion);
        intent.putParcelableArrayListExtra("queries", queries);
        intent.putExtra("category", category);
        startActivity(intent);
    }
}
在my
Results
类中,显示每个问题的分数,这是显示分数的行:

scoreTV.setText("You received " + QuestionView.getPointsPerQuestion().get(x) + " out of a possible 100 points.");
其他的一切都在我上面的
问题视图中。如果你还需要别的东西,请告诉我


前3个字符串是答案A(索引0)、B(索引1)、C(索引2)和D(索引3)。第一个int是正确答案。第五个字符串是问题。第二个int设置为用户在测验中选择的答案。最后一个字符串是找到答案的圣经经文。

正在创建的
QuestionView
在哪里?循环从哪里开始?我们还需要看一些其他代码(可能是
main()
,但很难知道它是如何构造的)。我猜您只创建了一次对象并重新使用它,在这种情况下,实例变量保持状态。你可以每次创建一个新的,或者定义一个
resetScores()
方法来重置所有内容,并在每个循环开始时调用它。嗯,我想我理解你的评论。我在开场白的底部编辑了一些东西。如果您需要进一步的代码,请告诉我。琐事应该是标签吗?
scoreTV.setText("You received " + QuestionView.getPointsPerQuestion().get(x) + " out of a possible 100 points.");