weixin_41244451 2024-06-13 08:55 采纳率: 93.9%
浏览 1
已结题

假如numbers='+8 -4 +2',运算结果是6,但是提示答案是2


function generateQuestion(numbers) {
    let result = 0;
    let question = '';
    let buttonsDisabled = true; // 按钮初始状态为不可点击
   
    if(numbers!='')//假如numbers='+8 -4 +2',运算结果是6,但是提示答案是2
    {
        // 将字符串按空格分割成数组
        let parts = numbers.split(' ');

        // 遍历数组,处理每个数字和运算符
        for (let i = 0; i < parts.length; i++) {
            let part = parts[i];
            // 确定当前部分是数字还是运算符
            let isNumber = !isNaN(part);
            let number, operator;

            if (isNumber) {
                number = parseInt(part, 10);
                
                // 如果不是第一个数字,则获取前一个元素作为运算符
                if (i > 0) {
                    operator = parts[i - 1];
                }
            } else {
                operator = part;
            }
            // 每隔一定时间显示数字和运算符
            setTimeout(() => {
                    displayQuestion(number,'','');
            }, (i + 1) * shijian * 1000);
            
            // 更新结果和问题字符串
            if (i > 0 && isNumber) {
                result += operator === '+' ? number : -number;
                question += ' ' + operator + number;
            }
        }
        // 添加第一个数字到问题字符串
        question = parts[0] + question;
    }
    questions.push({ question: question, answer: result });
}

function checkAnswer() {
    if($.trim($("input[name=answerInput]").val()) == "")
    {
        $("input[name=answerInput]").focus();
        return false;
    }
    document.getElementById('question1').textContent='';
    isQuestionDisplayed = false;//每一题重新禁用按纽
    const userAnswer = parseInt(document.getElementById('answerInput').value);
    if (userAnswer === questions[currentQuestionIndex].answer) {
        alert('正确!');
    } else {
        alert('错误,正确答案是: ' + questions[currentQuestionIndex].answer);
    }
    document.getElementById('answerInput').value = '';
    $("input[name=answerInput]").focus();
    
    if (userAnswer !== undefined) { // 确保 userAnswer 已被定义
        questions[currentQuestionIndex].userAnswer = userAnswer; // 添加这一行
    }
    if (userAnswer === questions[currentQuestionIndex].answer) {
        questions[currentQuestionIndex].isCorrect = true;
    } else {
        questions[currentQuestionIndex].isCorrect = false;
    }
    
    if(tiliang==1)
    {
        if (currentQuestionIndex < zushu-1) {//几道题
            currentQuestionIndex++;
            document.getElementById('question').textContent = '';
            generateQuestion(numbers);
        } else {
            let endTime = new Date().getTime(); // 记录结束时间
            let totalTime = (endTime - startTime) / 1000; // 转换为秒
            localStorage.setItem('questionsData', JSON.stringify(questions));
            window.location.href = "/oa/oa_zxsxl.php?act=jieguo&totalTime="+totalTime+"&type={$type}&type_text={$type_text}&xingshi={$xingshi}&xingshi_text={$xingshi_text}&tiliang={$tiliang}&zushu={$zushu}&bishu={$bishu}&shijian={$shijian}&yusu={$yusu}";
        }
    }
    else
    {
        currentQuestionIndex++;
        document.getElementById('question').textContent = '';
        generateQuestion(numbers);
    }
    if(xingshi==1 || xingshi==2)
    {
        document.getElementById('question').textContent = '请看题';
    }
    else
    {
        document.getElementById('question').textContent = '请听题';
        speak1('请听题');
    }
}

1、假如numbers='+8 -4 +2',运算结果是6,但是提示答案是2
2、符号+没有显示,第一个数字可以不显示+号,但后面的+号要显示

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-13 08:55
    关注

    引自免费微信小程序:皆我百晓生

    针对你提出的问题,让我们逐一进行分析与解决。

    问题一:运算结果错误

    generateQuestion函数中,计算结果的部分逻辑似乎存在问题。你提到numbers='+8 -4 +2'时,期望的结果是6,但实际上得到的是2。这主要是因为你的代码在处理加法运算符时没有正确地应用它到后续的数字上。具体来说,在遍历数组的过程中,当遇到一个正数(即加法)时,并没有明确地将其添加到结果中,而是直接在下一个数字出现时进行了条件判断和操作。

    解决方案

    修改generateQuestion函数中的循环部分,确保每次遇到数字都根据前一个运算符正确地更新result变量。为此,我们需要调整循环逻辑,确保首次执行时默认的运算符为加法,并且在遇到数字时总是根据最近的运算符进行相应的加减操作。

    function generateQuestion(numbers) {
        let result = 0;
        let question = '';
        let lastOperator = '+'; // 初始化运算符为加法
    
        if(numbers!='') {
            let parts = numbers.split(' ');
            let isFirstNumber = true; // 标记是否是第一个数字
    
            for (let i = 0; i < parts.length; i++) {
                let part = parts[i];
    
                if (!isNaN(part)) {
                    let number = parseInt(part, 10);
                    if (isFirstNumber) {
                        isFirstNumber = false;
                        result += number; // 处理第一个数字
                        question += number;
                    } else {
                        if (lastOperator === '+') {
                            result += number;
                        } else if (lastOperator === '-') {
                            result -= number;
                        }
                        question += ' ' + lastOperator + number;
                    }
                } else {
                    lastOperator = part; // 更新运算符
                }
            }
        }
        questions.push({ question: question, answer: result });
    }
    

    问题二:符号+未显示

    在生成问题字符串时,你的代码忽略了除第一个数字外的所有加号的显示。为了确保除了第一个数字之外的所有加号都能在问题字符串中显示出来,你需要在拼接问题字符串时更仔细地处理运算符的加入。

    解决方案

    在上面修改的generateQuestion函数中,我们已经通过question += ' ' + lastOperator + number;语句确保了除了第一个数字之外的加号都能被正确地添加到问题字符串中。

    这样修改后,你的代码应该能正确地处理加法和减法运算,并且在生成的问题字符串中正确显示所有运算符,包括加号。

    请尝试这些修改,并确认是否解决了你所遇到的问题。如果有任何进一步的疑问或需要更多的帮助,请随时告知。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 6月13日
  • 已采纳回答 6月13日
  • 创建了问题 6月13日

悬赏问题

  • ¥15 vue请求不到数据,返回状态200,数据为html
  • ¥15 访问url时不会自动调用其 Servlet的doGet()
  • ¥15 用白鹭引擎开发棋牌游戏的前端为什么这么难找
  • ¥15 MATLAB解决问题
  • ¥35 哪位专业人士知道这是什么原件吗?哪里可以买到?
  • ¥15 关于#c##的问题:treenode反序列化后获取不到上一节点和下一节点,Fullpath和Handle报错
  • ¥15 一部手机能否同时用不同的app进入不同的直播间?
  • ¥20 输入import torch显示Intel MKL FATAL ERROR,系统驱动1%,: Cannot load mkl_intel_thread.dll.
  • ¥15 点云密度大则包围盒小
  • ¥15 nginx使用nfs进行服务器的数据共享