我写了一个小程序来解决数学问题。但是当我运行时,它在第9,11,13,15行给出了未定义的偏移误差。 我搜索了各种问题,但没有找到任何有用的东西。 可能导致这种情况的原因。 ?
<?php
$arr = [1,3,5,7,9,11,13,15];
$tries=0;
$answer=0;
while(($answer!=30) && ($tries!=1000))
{
$tries = $tries+1;
$num1=getRandomNumber();
$num2=getRandomNumber();
$num3=getRandomNumber();
$num4=getRandomNumber();
$num5=getRandomNumber();
if($num5 + $num4 + $num3 + $num2 + $num1 == 30)
{
$answer = 30;
echo $num1 + "+" + $num2 + "+" + $num3 + "+" + $num4 + "+" + $num5 + " = 30";
break;
}
}
if($tries==1000)
{
echo "1000 tries completed";
}
function getRandomNumber()
{
$arr = [1,3,5,7,9,11,13,15];
$r = mt_rand(1,15);
if(($r%2)!=0)
{
return $arr[$r];
}
}
?>
答案 0 :(得分:3)
在getRandomNumber()
函数中,您生成的数组索引在1
和15
之间,但您的数组只有8
个元素。
要解决此问题,请更新对mt_rand()
的调用以支持您的实际数组大小:
$r = mt_rand(0, count($arr) - 1);
旁注(不具体回答),PHP中的字符串连接是使用句点.
而不是+
完成的:
echo $num1 + "+" + $num2 + "+" + $num3 + "+" + $num4 + "+" + $num5 + " = 30";
// should be:
echo $num1 . "+" . $num2 . "+" . $num3 . "+" . $num4 . "+" . $num5 . " = 30";
答案 1 :(得分:1)
你应该换行:
$r = mt_rand(1,15);
到
$r = mt_rand(0,count($arr)-1);
因为$arr
函数中的getRandomNumber
只有8个元素(不是16个)
答案 2 :(得分:1)
function getRandomNumber()
{
$arr = [1,3,5,7,9,11,13,15];
$r = mt_rand(1,15);
if(($r%2)!=0)
{
return $arr[$r];
}
}
mt_rand
函数返回的数字高于数组索引的数量7.您可以扩展数组并使其具有16索引或将mt_rand
函数中的范围缩小到0-7。