2014-06-30 65 views
0

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

你的数组有8个数字,所以索引0-> 7,但是你产生的随机索引1-> 15。 –

+0

啊!这是我的一个愚蠢的错误。我会解决它。 – user3605847

回答

3

在你getRandomNumber()功能,您正在生成之间的数组索引和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"; 
+0

啊!我对java和php之间的并置感到困惑。 – user3605847

1

你应该改变行:

$r = mt_rand(1,15); 

$r = mt_rand(0,count($arr)-1); 

因为在你getRandomNumber功能您$arr只有8个元素(不是16)

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返回的数字高于数组索引witch 7.您可以扩展数组并使其具有16个索引或将mt_rand函数中的范围减小到0-7。