多行未定义的偏移量

时间:2014-06-30 17:59:46

标签: php

我写了一个小程序来解决数学问题。但是当我运行时,它在第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];
    }
}
?>

3 个答案:

答案 0 :(得分:3)

getRandomNumber()函数中,您生成的数组索引在115之间,但您的数组只有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。