微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 Fisher-Yates Shuffle 在 TypeScript 中打乱数组?

如何解决如何使用 Fisher-Yates Shuffle 在 TypeScript 中打乱数组?

我正在尝试使用 TypeScript 编写一个测验。提出的问题应该随机挑选,我正在使用 Fisher-Yates Shuffle 来做到这一点 - 但它不会随机选择它们。

我做错了什么? Fisher-Yates Shuffle 出现在问题之后。

interface Question {
    questionText: string;
    answers: [string,string,string],correctAnswerIndex: number
}
const questions: Question[] = [
    {
        questionText: 'Wie viele Lichtminuten ist die Sonne weg?',answers: ['1','3','6','8'],correctAnswerIndex: 3
    }
   ]
const question = (Question: any) => {
    for (let i = Question.length -1; i > 0; i--) {
        const j = Math.floor(Math.random() * (i + 1));
        const temp = Question[i];
        Question[i] = Question[j];
        Question[j] = temp;
    }
    return Question;
    };


const rl = readline.createInterface({
    input: process.stdin,output: process.stdout
});
rl.on("close",function () {
    console.log("\nBYE BYE !!!");
    process.exit(0);
});
const askQuestion = (question: string) => new Promise<string>(resolve => rl.question(question,resolve));


async function main() {
    let correctAnswerCount=0;
    for (const question of questions.slice(0,5)) {
        console.log(question.questionText);
        let i = 0;
        for (const answer of question.answers) {
            console.log(String.fromCharCode(97 + i) + ') ' + answer);
            i++;
        }
        
        const answer = await askQuestion("Richtige Antwort hier eingeben: ");
        if (answer === String.fromCharCode(97 + question.correctAnswerIndex)) {
            correctAnswerCount++;
            console.log('Richtig ?')
           }
           
        else {
            console.log('Falsch ;(')
        }
        console.log("\n\n")
        
    }
    console.log('score: '+ correctAnswerCount*1000000);
    rl.close()
    
}
main();

解决方法

您确实定义了一个函数 const question = (Question: any) => {,但您从未调用过它!

修正变量名以免让阅读代码的每个人都感到困惑:

function shuffle<T>(arr: T[]): T[] {
    for (let i = arr.length -1; i > 0; i--) {
        const j = Math.floor(Math.random() * (i + 1));
        const temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }
    return arr;
}

然后,像这样使用

async function main() {
    shuffle(questions);
//  ^^^^^^^^^^^^^^^^^^^
    let correctAnswerCount = 0;
    for (const question of questions.slice(0,5)) {
        console.log(question.questionText);
        …

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。