繁体   English   中英

为什么Java和PHP的相同代码不起作用?

[英]Why does the same code for Java and PHP not work?

我用PHP和Java编写了一个程序,它生成所有可能的长度为2的单词。我使用了递归。 为什么程序在Java中工作而在PHP中不工作? 这是相同的代码。

Java的

package com.company;


public class Words {
public static void main(String[] args) {
    generate("", 2);
}

static void generate(String prefix, int remainder) {
    if (remainder == 0) {
        System.out.println(prefix);
    } else {
        for (char c = 'A'; c <= 'Z'; c++) {
            generate(prefix + c, remainder - 1);
        }
    }
}
}

PHP

generate('', 2);

function generate($prefix, $remainder)
{
if ($remainder == 0) {
    echo "$prefix\n";
} else {
    for ($c = 'A'; $c <= 'Z'; $c++) {
        generate($prefix . $c, $remainder - 1);
    }
}
}

$c在PHP中有字符串类型。 与数字相比, ++运算符的工作方式不同。

当处理字符变量而不是C的算术运算时,PHP遵循Perl的约定。 例如,在PHP和Perl $a = 'Z'; $a++; $a = 'Z'; $a++; $a变为'AA' ,而在C a = 'Z'; a++; a = 'Z'; a++; 将a转换为'[' ('Z'的ASCII值为90,'['的ASCII值为91) 请注意,字符变量可以递增但不会递减,即使只支持纯ASCII字母和数字(az,AZ和0-9)。 递增/递减其他字符变量无效,原始字符串不变。

资料来源: http//php.net/manual/en/language.operators.increment.php

改变你的循环

for ($c = 'A'; $c <= 'Z'; $c++) {

foreach (range('A', 'Z') as $c){

============================

编辑

对不起,我试图找到一份关于此的官方文件,但我不能。 所以我会尝试解释一下

在php中,当你比较2个字符串时,系统会尝试比较第一个字符然后第二个字符.....比较运算符将在第一个不同字符出现时停止

$a = 'ABCDEZ';
$b = 'ABCEZZ';

字符串$ b大于$ a,因为$ a和$ b开头的值ABC相同,但E(字符串$ b的索引3中的值)大于D(字符串$ a的索引3中的值) ,他们不需要比较其他角色

在这个问题中,原始循环是

for ($c = 'A'; $c <= 'Z'; $c++) {

它是好的,直到$ c ='Z',但在那之后$ c ++将是'AA'并且当php开始比较它时,'AA'<'Z'并且循环继续,这就是为什么我将循环更改为

foreach (range('A', 'Z') as $c){

使它工作

我希望你喜欢它,并对我的解释感到高兴,抱歉,因为我没有看到任何关于这个的文档,它只是php工作的方式,我知道它

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM