2014-06-30 110 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。