如何解决如何使用 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 举报,一经查实,本站将立刻删除。