簡體   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