我有一个有趣的数学难题要解决。
我正在编写测试以验证是否允许输入窗口中字段范围之外的值。在大多数情况下,这非常容易。
我正在使用类似这样的功能:
function getRanInt(min, max)
{
let min = Math.ceil(min);
let max = Math.floor(max);
return Math.floor(Math.random() * (max - min) + min);
}
设置我要测试的“错误”值的范围。
但是,在此方法中,有一个领域会用扳手投掷。一个字段对每个数字都有限制。因此,第一位数字只能在0-7之间,第二位数字只能在0-3之间。
[我的最初想法是将两个数字简单地连接在一起,这样我可以分别约束:
let m1_1;
let m1_2;
m1_1 = getRanInt(8,9);
m1_2 = getRanInt(4,9);
m1 = m1_1.toString() + m1_2.toString();
m1 = Number(m1);
直到我经过半秒钟的思考,才意识到这只会让我得到错误的值> 83,却忽略了可能的错误值的整个数组,例如24、36、18等...
我一直在绞尽脑汁去尝试并提出一个解决方案,尽管该解决方案并不是很复杂,但是我一直在空白。我以为我会在这里向您求助,看看您是否可以帮我放松一下。
附加:如果有人感兴趣,该字段的工具提示明确地说:
2 Digits:
1st = 0 - 7
2nd = 0 - 3
要测试所有不正确的值,可以将您提供的解决方案与第二组值结合使用,可以通过以下方式使用函数来访问这些值:
let result;
if(Math.round(Math.random()))
{
let m1_1;
let m1_2;
m1_1 = getRanInt(8,9);
m1_2 = getRanInt(0,9);
let m1 = m1_1.toString() + m1_2.toString();
result = Number(m1);
}
else
{
let m2_1;
let m2_2;
m2_1 = getRanInt(0,7);
m2_2 = getRanInt(4,9);
let m2 = m2_1.toString() + m2_2.toString();
result = Number(m2);
}
尝试
m1_1 = getRanInt(0,7);
m1_2 = getRanInt(0,3);