do {
if(type==3)//1-9直加直减
{
number = Math.floor(Math.random() * 9) + 1; // 1-9的随机数
operator = operators[Math.floor(Math.random() * 2)];
if (operator === '+') {//当做加法时
if((result>4 && result<9) || result===0)//当上一个结果是0、5~8时,与下一个数的和<=9
{
validNumber = result + number <= 9;
}
else if(result===9)//当上一个结果是9时,跳过
{
validNumber = false;
}
else//当上一个结果是1~4时,与下一个数的和<=4
{
validNumber = result + number <= 4;
}
}else{//当做减法时
if(result===5)//当上一个结果是5时,与下一个数的差=0
{
validNumber = result - number == 0;
}
else if(result===6)//当上一个结果是6时,与下一个数的差是0、1、5
{
validNumber = result - number == 0 || result - number == 1 || result - number == 5;
}
else if(result===7)//当上一个结果是7时,与下一个数的差是0~2、5、6
{
validNumber = (result - number >= 0 && result - number <= 2) || result - number == 5 || result - number == 6;
}
else if(result===8)//当上一个结果是8时,与下一个数的差是0~3、5~7
{
validNumber = (result - number >= 0 && result - number <= 3) || (result - number >= 5 && result - number <= 7);
}
else if(result===9)//当上一个结果是9时,与下一个数的差是0~8
{
validNumber = result - number >= 0 && result - number <= 8;
}
else//当上一个结果是0~4时,与下一个数的差是>=0
{
validNumber = result - number >= 0;
}
}
}
} while (!validNumber);
上面是一位数的随机加减法的逻辑判断,可以正常使用。
现在我想弄一个两位数的随机加减法,这两位数如果把个位和十位单独来判断,那么逻辑判断与一位数的随机加减法逻辑判断是一样的,结和上一个提问修改了一下,但是还是不行,修改如下:
if(type==10)//两位数直加直减
{
let numberTen = Math.floor(Math.random() * 9) + 1; // 随机生成十位数
let numberUnit = Math.floor(Math.random() * 9) + 1; // 随机生成个位数
number = numberTen * 10 + numberUnit;
let number_onesDigit=onesDigit(number);
let number_tensDigit=tensDigit(number);
operator = operators[Math.floor(Math.random() * 2)];
if (operator === '+') {
//个位
result_onesDigit += number_onesDigit;
if((result_onesDigit>4 && result_onesDigit<9) || result_onesDigit===0)
{
result_onesDigit = Math.min(9, result_onesDigit);
}
else if(result_onesDigit===9)
{
result_onesDigit = 0;
}
else
{
result_onesDigit = Math.min(4, result_onesDigit);
}
//十位
result_tensDigit += number_tensDigit;
if((result_tensDigit>4 && result_tensDigit<9) || result_tensDigit===0)
{
result_tensDigit = Math.min(9, result_tensDigit);
}
else if(result_tensDigit===9)
{
result_tensDigit = 0;
}
else
{
result_tensDigit = Math.min(4, result_tensDigit);
}
}
else
{
//个位
result_onesDigit -= number_onesDigit;
if(result_onesDigit===5)
{
result_onesDigit = 0;
}
else if(result_onesDigit===6)
{
result_onesDigit = getRandomNumber([0,1,5]);
}
else if(result_onesDigit===7)
{
result_onesDigit = getRandomNumber([0,1,2,5,6]);
}
else if(result_onesDigit===8)
{
result_onesDigit = getRandomNumber([0,1,2,3,5,6,7]);
}
else if(result_onesDigit===9)
{
result_onesDigit = Math.min(8, result_onesDigit);
}
else
{
result_onesDigit = Math.max(0, result_onesDigit);
}
//十位
result_tensDigit -= number_tensDigit;
if(result_tensDigit===5)
{
result_tensDigit = 0;
}
else if(result_tensDigit===6)
{
result_tensDigit = getRandomNumber([0,1,5]);
}
else if(result_tensDigit===7)
{
result_tensDigit = getRandomNumber([0,1,2,5,6]);
}
else if(result_tensDigit===8)
{
result_tensDigit = getRandomNumber([0,1,2,3,5,6,7]);
}
else if(result_tensDigit===9)
{
result_tensDigit = Math.min(8, result_tensDigit);
}
else
{
result_tensDigit = Math.max(0, result_tensDigit);
}
}
// 检查是否有效
validNumber = resultTen < 10 && resultUnit < 10;
}