Vanilla JavaScript:如何使两个随机数中的第二个总是高于第一个
Vanilla JavaScript: How to make the second number of two random numbers always higher than the first
我正在尝试做一个儿童数学测验,到目前为止我已经能够做到以下几点:获得两个0到10之间的随机数;使+或-运算符随机;如果答案是错误的或正确的,给予反馈;保持分数;不过,我面临的一个问题是,在某些情况下,运算符将是——第二个随机数将大于第一个随机数,从而得到一个——数的答案。从下面的代码中可以看出,我曾尝试在if语句中使用if语句,也曾尝试在if语句中使用while语句。两者都没有产生所需的结果。我很感激任何关于如何解决我的问题的建议。
代码:
document.getElementById("button1").addEventListener("click", question);
var plusMinus = document.getElementById("plusMinus");
var counter = 0;
function question(){
var startButton = document.getElementById("button1");
var number1 = document.getElementById("number1");
var number2 = document.getElementById("number2");
var decider = Math.random();
counter ++;
if(decider<0.5){
plusMinus.textContent = "+"
}
else{plusMinus.textContent = "-"
};
button1.textContent = "Round" + counter;
number1.textContent = Math.floor(Math.random()*11);
number2.textContent = Math.floor(Math.random()*11)
/*Solution No.1 that failed:
if(plusMinus.textContent == "-"){
if(number2.textContent < number1.textContent){
Math.floor(Math.random()*11);
}
}
else{Math.floor(Math.random()*11);
}*/
/*Solution No.2 that also failed:
if(plusMinus.textContent == "-"){
while(number2.textContent < number1.textContent){
Math.floor(Math.random()*11);
}
}
else{Math.floor(Math.random()*11);
}*/
};
document.getElementById("button2").addEventListener("click", answer);
var totalScore = 0;
function answer(){
var num1 = parseInt(document.getElementById("number1").textContent, 10);
var num2 = parseInt(document.getElementById("number2").textContent, 10);
var answer = parseInt(document.getElementById("userAnswer").value, 10);
var feedBack = document.getElementById("feedBack");
var scoreReport = document.getElementById("score");
if (plusMinus.textContent == "+"){
if(answer == num1 + num2) {
feedBack.textContent = "Well Done!";
totalScore = totalScore + 10;
}
else {
feedBack.textContent = "Try again!";
}
}
else {
if(answer == num1 - num2){
feedBack.textContent = "Well Done!";
totalScore = totalScore +10;
}
else {feedBack.textContent = "Try again!"};
}
scoreReport.textContent = totalScore;
};
这是一个jsfiddle:http://jsfiddle.net/way81/r9vdLkzp/1/
您可以检查它是否为负数。检查number2
是否大于number1
,然后交换它们。
类似这样的东西:
if(plusMinus.textContent == '-' && number2.textContent > number1.textContent) {
var a = number2.textContent;
number2.textContent = number1.textContent;
number1.textContent = a;
}
当您调用answer()
时,您将再次获得值。因此,交换顺序的事实不会对逻辑的其余部分产生任何影响,也不会得到任何负数。
代码段:
document.getElementById("button1").addEventListener("click", question);
var plusMinus = document.getElementById("plusMinus");
function question(){
var startButton = document.getElementById("button1");
var number1 = document.getElementById("number1");
var number2 = document.getElementById("number2");
var decider = Math.random();
button1.textContent = "Again";
number1.textContent = Math.floor(Math.random()*11);
number2.textContent = Math.floor(Math.random()*11);
if(decider<0.5){
plusMinus.textContent = "+"
}
else{plusMinus.textContent = "-"};
if(plusMinus.textContent == '-' && number2.textContent > number1.textContent) {
console.log('swapped')
var a = number2.textContent;
number2.textContent = number1.textContent;
number1.textContent = a;
}
};
document.getElementById("button2").addEventListener("click", answer);
function answer(){
var num1 = parseInt(document.getElementById("number1").textContent, 10);
var num2 = parseInt(document.getElementById("number2").textContent, 10);
var answer = parseInt(document.getElementById("userAnswer").value, 10);
var feedBack = document.getElementById("feedBack");
var scoreReport = document.getElementById("score");
var totalScore = 0;
if (plusMinus.textContent == "+"){
if(answer == num1 + num2) {
feedBack.textContent = "Well Done!";
} else {
feedBack.textContent = "Try again!";
}
}
else {
if(answer == num1 - num2){
feedBack.textContent = "Well Done!";
} else {feedBack.textContent = "Try again!"};
}
for(count=0; count <=10; count++){
if(plusMinus == "+" && answer == num1+num2){
totalScore +1;
}
else if(plusMinus == "-" && answer == num1-num2){
totalScore -1;
}
}
scoreReport.textContent = totalScore;
};
*{
border: 2pt solid black;
}
p {
height: 20px;
width: 50px;
font-family: impact;
size: 16pt;
text-align: center;
}
<body>
<div>
<button id = "button1">Start!</button>
<p id = "number1"></p>
<p id = "plusMinus">+</p>
<p id = "number2"></p>
<input id = "userAnswer" type=text>
<button id = "button2">Answer</button>
<p id = "feedBack"></p>
<p id = "score">Score: 0</p>
</div>
<script src="randomMathsTest.js"></script>
</body>
您可以使用第一个随机数作为创建第二个随机数的参数。例如:
var num1 = Math.floor(Math.random()*11);
var num2 = num1+ Math.floor(Math.random()*(10-num1));
或者类似的东西。只需创建一个较小的范围并将第一个数字添加到结果中,就可以生成一个介于第一个随机数和10之间的随机数。
附录
通过遵循这种方法,你确实扭曲了问题中出现较大数字的可能性@乔尔的回答不会因此而受损。
这里有一个你可以使用的通用解决方案(它不完全适应你当前的代码示例,但我相信你会让它发挥作用):
// create a random Boolean that determines whether it's minus
var isMinus = !Math.round(Math.random());
// create an array of two random numbers from 0-10
var numbers = [Math.floor(Math.random()*11), Math.floor(Math.random()*11)];
// if isMinus, sort numbers ascending, else keep as-is
numbers = isMinus ? numbers.sort().reverse() : numbers;
// assign the proper sign to the DOM element
plusMinus.textContent = isMinus ? '-' : '+';
// assign the proper array elements to the DOM elements
number1.textContent = numbers[0];
number2.textContent = numbers[1];
相关文章:
- IE11中的第二个调用取消了第一个Fetch API调用
- Angular UI网格:如何通过第一个UI网格中的按钮使第二个UI网格可见
- 我的设备后退按钮工作不正常,它转到第一个html,但返回到第二个html
- 第一个jquery事件正在发生,但没有发生第二个事件
- 按第二个 ng 重复值排序第一个 ng 重复
- 第二个 Jquery json 在第一个 Jquery 完成之前被解雇
- 如果第二个 html 元素位于第一个 html 元素上方,如何移动该元素
- JS深度比较2个对象并删除在第二个对象中找到的项目,而不是第一个
- 为什么我添加的第二个jQuery代码部分/新的CSS部分导致第一个jQuery代码在我的页面上不起作用
- 在 javascript 中创建第二个 html 元素会删除第一个
- 如何在第一个 php 脚本中访问变量 'a' 的值到第二个 php 脚本,并通过 ajax 调用链接
- 数组中的第一个视频始终是第一个或第二个在下一个视频功能上播放
- 第二个 JS 按钮触发第一个 JS 按钮
- 第二个 jQuery toggle() 文件破坏了第一个 toggle() 方法
- 如何以第二个 JavaScript 形式加载数据,然后解析为第一个 JavaScript 形式
- 在表中第一个tr的倒数第二个td中选择按钮-使用jQuery选择器
- 若在第一个字段中选择了日期,则第二个字段的日期应大于第一个
- 如何在angularjs中使用第一个api的结果,进入第二个api调用
- (HTML / JS)添加“,“在第二个最后一个字串和隐藏"&"如果字符串中有一个单词
- .children(“:第一个children”)-ajax-多个第一个children