【问题标题】:PHP loop error?PHP循环错误?
【发布时间】:2017-10-30 18:14:15
【问题描述】:

我正在尝试制作一个程序,用户可以在其中输入起始编号、结束编号和增量。程序应确认每个值是数字,然后将其平方并返回,然后增加增量。该程序执行 1 次操作,然后如果我输入的最终值小于 10,则停止,但如果大于 10,则根本不运行。我是学生,也是我的教授。在接下来的两周里消失了。任何反馈都会有所帮助,谢谢。

例如

起始值:5
最终值:20
增量:5

你的结果应该是:

5 的平方等于 25
10 的平方等于 100
15 的平方是 225
20 的平方是 400

<?php
$endValue = $_POST['endValue'];
$startValue = $_POST['startValue'];
$incValue = $_POST['incValue'];

if (is_numeric($endValue))
{
    for ($startValue = $startValue; $startValue <= $endValue; $startValue = $incValue * $incValue);
    {
        print("<p> testing $startValue </p>");
    }
}
else 
{
    print("<p> Bad input - use a number </p>");
    print("<p><a href=\"squared.html\"> return </a></p>" );
}
?>

【问题讨论】:

  • 确定你的 for 循环是对的吗?
  • 您想增加 $startValue,而不是每次迭代都将其设置为相同的值。请改用for ( ..; ..; $startValue += $incValue)。并清理那个缩进:-)
  • 既然你在学习:当卡住时,Rubber Duck Debugging 可以帮助你识别问题。

标签: php


【解决方案1】:

使用 pow 函数求平方数。此外,您需要将数字增加 5 而不是倍数。

$endValue = 20;
$startValue = 5;
$incValue = 5;

    If (is_numeric($endValue))
    {
        for ($startValue = $startValue; $startValue <= $endValue; $startValue += $incValue)
        {
            echo "$startValue squared is " . pow($startValue, 2) . "\n";
        }
    }
    else
    {
        print("<p> Bad input - use a number </p>");
        print("<p><a href=\"squared.html\"> return </a></p>" );
    }

输出:

5 squared is 25
10 squared is 100
15 squared is 225
20 squared is 400

【讨论】:

    【解决方案2】:

    在您的 for 循环中定义另一个变量作为循环索引并更改该变量。将 $i 增加 $incValue 的值。像这样:

    echo "<pre>\n";
    
    $endValue = 20;
    $startValue = 5;
    $incValue = 5;
    
        If (is_numeric($endValue))
        {
            for ($i = $startValue; $i <= $endValue; $i += $incValue)
            {
                echo "$i squared is " . $i**2 . "\n";
            }
        }
        else
        {
            print("<p> Bad input - use a number </p>");
            print("<p><a href=\"squared.html\"> return </a></p>" );
        }
    
    echo "</pre>\n";
    

    【讨论】:

    • 修改startValue没有问题,只要不假设循环后的值相同。
    • 我可以建议If(!is_int($endValue/$incValue)){ echo "bad input";}
    • @MatsLindh:“......只要你不认为值是相同的......”。这就是为什么我从不这样做的原因,我不想修改收到的值以防以后需要它们。但你是对的,它可以做到。
    【解决方案3】:

    for循环后面的分号有问题。此外,您需要更加小心地使用 $_POST 数据。认为它被污染了,直到你验证它。您的 for 循环不需要初始化程序,因为您已经在它之前的循环之外执行了该操作。您的增量部分也需要更正以获得您寻求的结果。

    所以,这里有一个工作示例,可以为您提供一般指导:

    <?php
    $endValue = 0;
    $startValue = 0;
    $incValue = 0;
    
    // simulating a $_POST for testing ...:
    $_POST['endValue'] = 20;
    $_POST['startValue'] = 5;
    $_POST['incValue'] = 5;
    
    
    if ( is_int( $_POST['endValue'] ) ){
         $endValue = trim( $_POST['endValue'] );
    }
    if ( is_int( $_POST['startValue'] ) ) {
        $startValue = trim( $_POST['startValue'] );
    }
    if ( is_int( $_POST['incValue'] ) ) {
        $incValue = trim( $_POST['incValue'] );
    }
    
    if ($endValue == 0 || $startValue == 0 || $incValue == 0) {
        trigger_error("\nBad Input...ending now.");
    }
    
    
    for (; $startValue <= $endValue; $startValue += $incValue )
    {
            print("\n<p> testing $startValue squared = " . $startValue * $startValue . "</p>");
    }
    
    
        print("\n<p><a href=\"squared.html\"> return </a></p>" );
    

    live code

    注意:您可以选择使用 pow() 代替 $startValue * 本身。

    【讨论】:

      猜你喜欢
      • 2018-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-12
      • 2012-01-11
      相关资源
      最近更新 更多