有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Android Studio(Java)未接收顺序正确的按钮值

我目前正在开发一个游戏,玩家应该通过选择3个按钮(其中1个是答案)和一个“下一步”按钮来解决X+Y问题(通过将组件的值替换为下一个问题的值)。但是,我无法统计答案,因为我的测试选择(按钮)总是测试下一个问题的值

要提供一点背景信息,
questionCategories是不同级别的ArrayList的ArrayList
e、 g.问题类别。get(selectedLevel)返回不同算法的数组列表

jumbleOptions用正确和错误答案填充3个按钮,这些按钮位于选项

在回答问题1时,显示的选项值属于问题1,但测试值(在测试中)来自问题2

例如
Qn1:3+5-A:2,B:8,C:4
Qn2:8+2-A:10,B:11,C:12
当我在B上尝试Qn1并单击“下一步”转到下一个问题(并测试正确性)时,我的程序不是测试B:8,而是测试B:11。我试图记录每个按钮的捕获值和问题的答案,但它们都是正确的,我不确定哪里出了问题

代码片段位于创建的视图中,由于原始元素中的占位符文本,第一个问题被初始化为显示。很抱歉,如果代码片段没有太多意义,请尽量保持简短,以便(希望)更具可读性

// Initialize first question to display
questionNumber.setText("Question " + String.valueOf(qnNumDisplay));
questionTitle.setText(((questionCategories.get(selectedLevel)).get(0)).toString());
jumbleOptions(((questionCategories.get(selectedLevel)).get(0)));

do {
    nextButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            final Question q = (questionCategories.get(selectedLevel)).get(numQnAnswered);
            // Increment question number related variable
            numQnAnswered++;
            // Replace displayable elements with next question
            //Question Number
            questionNumber.setText("Question " + String.valueOf(numQnAnswered));

            questionTitle.setText(q.toString());
            jumbleOptions(((questionCategories.get(selectedLevel)).get(numQnAnswered)));

            boolean test = checkAnswer(String.valueOf(q.getAnswer()),
                options.get(SELECTED_OPTION).getText().toString());
            Log.d("Answer Correctness", String.valueOf(test));
        }
    });
    counter++;
} while (counter < NUMBER_OF_QNS);

共 (1) 个答案

  1. # 1 楼答案

    让我们模拟一下这个场景: 第一个问题手动设置,下一个问题基于按钮单击加载。我假设numQnAnswered0,你从第numQnAnswered位的Question对象得到答案,对吗

    final Question q = (questionCategories.get(selectedLevel)).get(numQnAnswered);
    

    正如你的代码所说。 请注意这里:

    // Increment question number related variable
    numQnAnswered++;
    

    但现在的问题是,答案是通过点击按钮验证的,我想你已经忘记了第一个问题是手动设置的&;在检查答案之前,您已经增加了numQnAnswered变量,因此您的问题比答案落后一步。希望它有意义

    验证当前问题后,只需减少numQnAnswered变量

    // Initialize first question to display
    questionNumber.setText("Question " + String.valueOf(qnNumDisplay));
    questionTitle.setText(((questionCategories.get(selectedLevel)).get(0)).toString());
    jumbleOptions(((questionCategories.get(selectedLevel)).get(0)));
    
    do {
        nextButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final Question q = (questionCategories.get(selectedLevel)).get(numQnAnswered);
                // first we need to check answer of previous question 
                boolean test = checkAnswer(String.valueOf(q.getAnswer()),
                    options.get(SELECTED_OPTION).getText().toString());
                Log.d("Answer Correctness", String.valueOf(test));
    
                // Increment question number related variable
                numQnAnswered++;
                // Replace displayable elements with next question
                //Question Number
                questionNumber.setText("Question " + String.valueOf(numQnAnswered));
    
                questionTitle.setText(q.toString());
                jumbleOptions(((questionCategories.get(selectedLevel)).get(numQnAnswered)));
    
    
            }
        });
        counter++;
    } while (counter < NUMBER_OF_QNS);