【问题标题】:Need help checking my logic please需要帮助检查我的逻辑
【发布时间】:2014-07-08 00:47:22
【问题描述】:

我有这个循环,当它应该停止时它不会停止,它只发生在我的生产服务器上,而不是我的开发服务器上。所以我要疯了。

//objectName can be any value from [a-}], 
char objectName = 'a'; //objectName is initialized with value 'a'

//before objectName hit the line below, it was increment objectName++; until the value of 
//objectName = '}'
for( char c = objectName; c <= 'z'; c++ ){
    //do something
}

objectName 可以是任何字符,但在我的情况下,我知道我的 objectName 将是“}”字符,这在技术上不仅仅是“z”。所以我不明白的是为什么我的循环还在执行。

有趣的是,我们有使用 JAVA 1.6.0_30 的测试服务器,我们已经尝试在那里进行测试,它工作得很好。

我的开发服务器使用:java 1.6.0_45 我的产品服务器使用:java 1.6.0_30

如果您发现我的逻辑有任何问题,请告诉我,任何会使我的循环处于活动状态的情况,即使它不应该让我知道。

【问题讨论】:

  • 你是如何部署到生产服务器的?任何可能改变字符编码的东西?如果 objectName'}' 而不是 "}" 会发生什么?
  • @hexafraction 我认为"}" 是一个错字,好像它真的是String 我不认为该片段会编译
  • 老实说,我认为它不会与“}”一起编译。
  • objectName 的类型是什么?用“}”初始化它建议使用字符串,但然后你用它来初始化一个字符。
  • 您可能会将 objectName 更改为其他名称,尝试硬编码您的 for 循环 char c = '}' 并查看它是否有效?如果它没有循环,那么它可能不是你的循环问题。但是变量 objectName 可能会被意外分配到其他地方。

标签: java loops for-loop char


【解决方案1】:

我不是专家,所以我在这里可能是错的,但是使用字符来遍历 for 循环对我来说看起来很陌生,而且可能不是最好的做法。

我建议使用字符数组/(数组)列表并以这种方式遍历列表,或者如@Chris 所说,通过获取字符的数值

for(int i = Character.getNumericValue(objectName); i <= Character.getNumericValue('z'); i++)
{
    //System.out.println("test");
}

就像我说的我不是专家,但使用数字来遍历 for 循环似乎是一种更好的做法,或者至少是一种更稳定的做法。

【讨论】:

    【解决方案2】:

    在您的问题中,您说“我有这个循环在它应该停止时不会停止......”它应该在什么时候停止?当前,当条件变为false 时,循环正在退出。基本上当10 &gt;= 35.

    首先,'}' 在“技术上”比'z' 多吗?

    '}' 相当于 -1,'z' 相当于正 35。

    使用您未注释的代码,您将按预期循环 26 次(使用 char 'a' 和 char 'z')。

    'a' 相当于 10,'z' 相当于 35。

    您可以使用Character.getNumericValue()检查这些值

    char objectName = 'a'; 
    for( char c = objectName; c <= 'z'; c++ ){
        //System.out.println("test");
    }
    

    产生与以下相同的结果:

    for( int i = 10; i <= 35; i++ ){
        //System.out.println("test");
    }
    

    除非我遗漏了什么,否则这似乎是一种过于复杂的方法来实现非常简单的结果。

    我会要求澄清一些事情,但我不能发表评论。

    【讨论】:

    • '}' 大于基于ASCII 表的'z'。或者您可以将其转换为整数。尽管 Java 使用unicode,但我不确定它为什么将 ASCII 值用于 for 循环。有趣的。 for( int i = 1; i
    • 谷歌搜索更多后,我意识到 UTF-8 & 16 与 ASCII 表具有相同的值。这意味着 Character.getNumericValue() 是一些其他特殊方法。所以我们不应该使用这个 to 方法来转换,因为它不包含符号和特殊命令。
    • 我的意图是根据字符串的第一个字母将字符串数组分组到按字母顺序排列的组中。在遇到这个问题循环之前,我已经遍历了字符串数组。就我而言,我知道我的最后一个字符串以“z”开头。因此,当我完成分组时,我会增加 objectName++;再一次;这就是为什么我知道在点击这个循环之前的 objectName 等于'{'或者我输入错误的'}',但它肯定比'z'更多。有问题的循环是为了以防最后一项不以“z”开头,那么我就不会拥有所有 26 个组。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-14
    • 2020-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多