【问题标题】:Translate Java code to PHP code (13 lines)将 Java 代码转换为 PHP 代码(13 行)
【发布时间】:2009-08-31 18:21:14
【问题描述】:

simonn helped me to code an ordered integer partition function here.他发布了两个函数:一个函数简单地返回分区计数,第二个函数将分区作为列表给出。

我已经设法将第一个函数从 Java 翻译成 PHP:

很遗憾,我无法翻译第二个函数。谁能帮我翻译一下这个小功能?

public class Partitions2
{
    private static void showPartitions(int sizeSet, int numPartitions)
    {
        showPartitions("", 0, sizeSet, numPartitions);
    }

    private static void showPartitions(String prefix, int start, int finish,
                int numLeft)
    {
        if (numLeft == 0 && start == finish) {
                System.out.println(prefix);
        } else {
                prefix += "|";
                for (int i = start + 1; i <= finish; i++) {
                        prefix += i + ",";
                        showPartitions(prefix, i, finish, numLeft - 1);
                }
        }
    }

    public static void main(String[] args)
    {
        showPartitions(5, 3);
    }
}

如果解决方案是一个函数而不是一个具有多个函数的类,那就太好了。

提前非常感谢您!再次感谢 simonn 的出色回答!

【问题讨论】:

    标签: java php


    【解决方案1】:

    您可能不需要 main 方法,它似乎只是一个展示如何调用其他方法的测试平台。

    将此代码直接映射到 PHP 的问题是您不能在 PHP 中重载方法名称。相反,您应该专注于翻译 showPartitions 函数的第二个版本。如果您需要 2 参数版本,您可以使用前缀和开始参数的默认值(您必须更改参数顺序才能做到这一点,因为在 PHP 中可选参数必须排在最后)。

    这是我(未经测试)尝试翻译最重要的功能:

    function showPartitions($prefix, $start, $finish, $numLeft)
    {
        if ($numLeft == 0 && $start == $finish) {
            echo $prefix."\n";
        } else {
            $prefix .= "|";
            for ($i = $start + 1; $i <= $finish; $i++) {
                $prefix .= $i.",";
                showPartitions($prefix, $i, $finish, $numLeft - 1);
            }
        }
    }
    

    【讨论】:

    • 如果这应该是类中的一个方法,它应该用 $this->showPartitions 调用自己
    • 非常感谢! :) 它工作正常。这正是我想要的。唯一的错误:您忘记了第 8 行中的“$”。它必须是:$prefix .= $i.",";
    • @OIS:我最初将它作为一个使用 self:: 调用的静态方法,但 OP 不希望它作为类的一部分,所以我只是将它作为一个独立函数。 @marco92w:谢谢,我已经对其进行了编辑以解决该问题。
    猜你喜欢
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    • 2014-09-16
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多