2014-05-19 2 views
1

이 루프는해야 할 때 멈추지 않고 내 프로덕션 서버에서만 발생하지만 내 dev 서버에서는 발생하지 않습니다. 그래서 나는 미쳐 갈거야.내 논리를 확인하는 데 도움이 필요합니다.

//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 
} 

개체 이름은 임의의 문자 수 있지만 내 경우에는 내 개체 이름이 'Z'보다 기술적으로 더 "}"문자가 될 것이라는 점을 알고있다. 그래서 내가 이해할 수없는 것은 왜 내 루프가 여전히 실행되고 있는지입니다.

재미있는 점은 JAVA 1.6.0_30을 사용하는 테스트 서버가 있다는 것입니다. 우리는 테스트를 해본 결과 괜찮습니다.

내 데브 서버 사용 : 자바 1.6.0_45을 내 생산성 서버 사용 : 자바 1.6.0_30

당신이 나를 알고 내 루프도 활성화 될 것 어떤 상황을 알려 주시기 바랍니다 내 논리 아무 잘못 표시되는 경우 언제 나에게 알려주지 않아야 해.

+1

프로덕션 서버에 어떻게 배포합니까? 문자 인코딩을 변경할 수있는 것은 무엇입니까? 'objectName'이''}''과''}''에 반대한다면 어떻게됩니까? – hexafraction

+0

@hexafraction 나는''}''이 오타 (typo)라고 생각합니다. 마치''String''처럼 조각이 컴파일 될 것이라고 생각하지 않습니다. – awksp

+0

"" "정직하게 컴파일하지 않을 것이라고 생각합니다. – user184994

답변

0

질문에 "내가해야 할 때 멈추지 않을 루프가 있습니다 ..."라고 말하면 중단해야합니까? 현재 조건은 false이되면 루프가 종료됩니다. 기본적으로 10 >= 35 일 때.

우선 '}'은 "기술적으로"'z' 이상입니까?

'}'는 -1로 동일하며 'z'는 예상대로, 루프 26 번 (문자 'a' & 문자 'z'를 사용) 것입니다 주석되지 않은 코드를 사용하여 양 (35)

에 해당합니다.

'a'

당신은 Character.getNumericValue()

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

을 사용하여 이러한 값을 확인할 수 있습니다 (35)

에 해당하는 10 'z'에 해당 같이 같은 결과를 얻을 수 있습니다 :

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

I 않는 한 뭔가를 놓친 경우, 이것은 매우 간단한 결과를 얻기 위해 지나치게 복잡한 방법처럼 보입니다.

나는 뭔가에 대한 설명을 요구했을 것이지만 나는 논평 할 수 없다.

+0

'}'은 [ASCII] (http://www.cs.cmu.edu/~pattis/15-1XX/common/handouts/ascii.html) 테이블을 기반으로 'z'이상입니다. 또는 정수로 캐스팅 할 수 있습니다. 자바는 [유니 코드] (http://stackoverflow.com/questions/15610247/can-we-switch-between-ascii-and-unicode)를 사용하지만, for 루프에 ASCII 값을 사용하는 이유는 확실하지 않습니다. 흥미 롭 군. for (int i = 1; i <= 'z'; i ++) { System.out.println (i); } 이 경우에는 JRE에서 ASCII 값을 기반으로 모든 방법으로 인쇄됩니다. 캐릭터를 통한 루핑이 어떻게 작동하는지 잘 모릅니다. 나는 그것이 ASCII 값인 – Sky

+0

으로 바뀌 었다고 추측한다. 더 많이 검색 한 후, 나는 UTF-8 & 16이 ASCII 테이블과 같은 값을 갖는다는 것을 깨달았다. 즉, Character.getNumericValue()는 다른 특별한 방법입니다. 따라서 기호 및 특수 명령을 포함하지 않으므로 변환 할 때이 메서드를 사용하면 안됩니다. – Sky

+0

제 의도는 문자열의 배열을 문자열 첫 글자를 기반으로 알파벳 그룹으로 묶는 것입니다. 이 문제 루프를 치기 전에 문자열 배열을 반복 해 보았습니다. 제 경우 엔 마지막 줄이 'z'로 시작한다는 것을 압니다. 따라서 그룹화가 끝나면 objectName ++가 증가합니다. 한번 더; 그래서이 루프를 치기 전에 objectName이 '{'또는 'mistype'} '과 같지만, 모든 것과 모든 것이'z '이상임을 알 수 있습니다. 문제의 루프는 마지막 항목이 'z'로 시작하지 않으면 모든 26 개의 그룹을 가질 수 없을 때를 대비하여 있습니다. – user3570611

0

저는 전문가가 아니므로 여기에서 잘못 될 수는 있지만 for 루프를 반복하는 문자를 사용하면 나와 외계인으로 보일 수 있습니다. 내가 난 말했듯이

는 내가 문자의 배열/(배열) 목록을 사용하여 목록을 그런 식으로 반복 또는 @ 크리스으로 제안

는 문자

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

의 숫자 값을 얻어서 말했다 어떤 전문가도 아니지만 for 루프를 반복하는 데 숫자를 사용하는 것이 더 나은 실행 또는 최소한보다 안정적인 것처럼 보입니다.

관련 문제