需要帮助检查我的逻辑

时间:2014-05-19 22:31:01

标签: java loops for-loop char

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

//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的测试服务器,我们在那里尝试测试,它工作得很好。

My Dev Server使用:java 1.6.0_45 我的Prod服务器使用:java 1.6.0_30

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

2 个答案:

答案 0 :(得分:0)

在你的问题中,你说“我有这个循环,它不会停止它应该......”何时应该停止?当条件变为false时,循环正在退出。基本上是10 >= 35

首先,'}'“技术上”如何超过'z'

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

使用您未注释的代码,您将按预期循环26次(使用char 'a'&amp; 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");
}

除非我遗漏了某些东西,否则这似乎是一种过于复杂的方式来实现一个非常简单的结果。

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

答案 1 :(得分:0)

我不是专家,所以我可能在这里错了,但是使用字符迭代for循环对我来说看起来很陌生,可能不是最好的事情。

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

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

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