首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Java和PHP的相同代码不能工作?

为什么Java和PHP的相同代码不能工作?
EN

Stack Overflow用户
提问于 2017-10-05 06:35:20
回答 2查看 149关注 0票数 4

我用PHP和Java编写了一个程序,生成长度为2的所有可能的单词。为什么程序使用Java而不是PHP工作?密码是一样的。

Java

代码语言:javascript
复制
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);
        }
    }
}
}

代码语言:javascript
复制
generate('', 2);

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

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-05 06:50:32

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

PHP在处理字符变量的算术运算时遵循Perl的惯例,而不是C的,例如,在PHP和Perl中,$a = 'Z'; $a++;$a转换为'AA',而在Ca = 'Z'; a++;中,ASCII值为‘Z’,ASCII值为90,ASCII值为‘’[‘’)。注意,字符变量可以递增,但不能减少,即使这样,也只支持普通的ASCII字母表和数字( are、are和0-9)。递增/递减其他字符变量没有影响,原始字符串不变。

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

票数 9
EN

Stack Overflow用户

发布于 2017-10-05 06:49:14

将循环更改为

代码语言:javascript
复制
for ($c = 'A'; $c <= 'Z'; $c++) {

代码语言:javascript
复制
foreach (range('A', 'Z') as $c){

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

编辑

对不起,我想找一份关于这件事的正式文件,但我做不到。所以我试着解释一下

在php中,当您比较两个字符串时,系统将尝试比较第一个字符和第二个字符串……当出现第一个不同的字符时,比较运算符将停止。

示例

代码语言:javascript
复制
$a = 'ABCDEZ';
$b = 'ABCEZZ';

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

在这个问题中,最初的循环是

代码语言:javascript
复制
for ($c = 'A'; $c <= 'Z'; $c++) {

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

代码语言:javascript
复制
foreach (range('A', 'Z') as $c){

使它发挥作用

我希望你喜欢我的解释,不好意思,因为我没有看到任何关于这个的文档,这只是php的工作原理,我知道它是

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46579259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档