【问题标题】:the code keep printing same word two times代码保持打印相同的单词两次
【发布时间】:2021-02-09 09:22:18
【问题描述】:

这就是我想要做的:

  • 输出1到100之间的数字

• 如果数字可以被三 (3) 整除,则输出单词“foo”

• 如果数字可以被五 (5) 整除,则输出单词“bar”

• 如果数字可以被三 (3) 和 (5) 整除,则输出单词 “美食吧”

我能够做到这一点,但它打印了两次 foobar,如下面的输出所示,而不是一次。我做错了什么?

这是我当前的代码:

<?php

for ($i = 1; $i<=100; $i++) {
    if ($i % 3 && $i % 5) {
        echo $i;
    } else {
        if ($i % 3 == 0) {
            echo "foo";
        }
        if ($i % 5 == 0) {
            echo "bar";
        }
        if ($i % 3 == 0 && $i % 5 == 0) {
            echo "foobar\r\n";
        }
    }
    //line breaks to enhance output readability
    echo "\r\n";
}

?>

电流输出:

1
2
foo
4
bar
foo
7
8
foo
bar
11
foo
13
14
foobarfoobar

16
17
foo
19
bar
foo
22
23
foo
bar
26
foo
28
29
foobarfoobar

31
32
foo
34
bar
foo
37
38
foo
bar
41
foo
43
44
foobarfoobar

46
47
foo
49
bar
foo
52
53
foo
bar
56
foo
58
59
foobarfoobar

61
62
foo
64
bar
foo
67
68
foo
bar
71
foo
73
74
foobarfoobar

76
77
foo
79
bar
foo
82
83
foo
bar
86
foo
88
89
foobarfoobar

91
92
foo
94
bar
foo
97
98
foo
bar

正如我在回答中发布的那样:

  if ($i % 3 && $i % 5) {
        echo $i;
    } else {
        else if ($i % 3 == 0) {
            echo "foo";
        }
        else if ($i % 5 == 0) {
            echo "bar";
        }
       else  if ($i % 3 == 0 && $i % 5 == 0) {
            echo "foobar\r\n";
        }
    }

这是对的吗?我无法在评论中正确发布所有这些代码。

【问题讨论】:

  • 某人recently asked a similar question,基本就是这样解决FizzBu​​zz问题的。您尝试实现它的方式可以工作,但您可能应该重新排列ifs 的顺序(以便它首先检查foobar),如果您不想尝试,请改用elseif我对上述问题的回答中的方法(我更喜欢使用数组和implode() 的解决方案)。

标签: php for-loop if-statement


【解决方案1】:

它没有打印两次“foobar”。它正在打印“foo”,然后是“bar”,然后是“foobar”,没有任何空格。发生这种情况是因为所有三个if 条件都触发了。使用elseelseif 确保当一个if 触发时,不会检查其他人。

编辑:

    // ...
    if ($i % 3 == 0 && $i % 5 == 0) {
        echo "foobar";
    } elseif ($i % 3 == 0) {
        echo "foo";
    } elseif ($i % 5 == 0) {
        echo "bar";
    }
    // ...

【讨论】:

  • 你能告诉我怎么做吗?
  • 只需将这三个if 中的第二个和第三个替换为elseif
  • 你是不是那个意思if ($i % 3 &amp;&amp; $i % 5) { echo $i; } else { else if ($i % 3 == 0) { echo "foo"; } else if ($i % 5 == 0) { echo "bar"; } else if ($i % 3 == 0 &amp;&amp; $i % 5 == 0) { echo "foobar\r\n"; } }
  • 我也在我的问题中添加了这段代码。请看一下它比 cmets 更清晰。
  • (没有投票)最后一个 else if 应该排在第一位,你可以使用 % 15。
【解决方案2】:

我猜这就是你要找的东西

<?php
for ($i = 1; $i<=100; $i++) {

        if (($i % 3 == 0)){
            echo "foo";
            if (($i % 5 == 0)){
                echo "bar";
            }
            echo "</br>";
        }
        elseif (($i % 5 == 0)){
            echo "bar";
            echo "</br>";
        }
        else {
            echo $i;
            echo "</br>";
        }
}
?>

这将为您提供如下所示的输出

1
2
foo
4
bar
foo
7
8
foo
bar
11
foo
13
14
foobar
16
17
foo
19
bar
foo
22
23
foo
bar
26
foo
28
29
foobar
31
32
foo
34
bar
foo
37
38
foo
bar
41
foo
43
44
foobar
46
47
foo
49
bar
foo
52
53
foo
bar
56
foo
58
59
foobar
61
62
foo
64
bar
foo
67
68
foo
bar
71
foo
73
74
foobar
76
77
foo
79
bar
foo
82
83
foo
bar
86
foo
88
89
foobar
91
92
foo
94
bar
foo
97
98
foo
bar

【讨论】:

    猜你喜欢
    • 2021-10-12
    • 2011-03-17
    • 2018-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    • 2016-12-23
    • 2021-12-25
    相关资源
    最近更新 更多