2012-07-15 2 views
0

여러 조건으로 여러 if 문을 작성하려고합니다. 코드를 실행해도 잘 동작하지만 결코 출력을 변경하지 않습니다. 저는 항상 두 번째 문장> 29를 얻습니다. 여기에 제 코드가 있습니다.텍스트와 정수를 비교하는 다중 if 문

if (label.text <= @"30") 
    {label.text = @"Text";} 
else if (label.text >= @"29") 
    {label.text = @"Text";} 
else if (label.text >= @"19") 
    {label.text = @"Text";} 
else if (label.text >= @"10") 
    {label.text = @"Text";} 
else if (label.text = @"00") 
    {label.text = @"Text";} 

확인 내 코드를 변경하지만 난 여전히 어떤 제안

 label.text = temporaryValue; 
    if ([label.text floatValue] <= 30) 
     {label.text = @"text1";} 
else if ([label.text floatValue] >= 29) 
     {label.text = @"text2";} 
else if ([label.text floatValue] >= 19) 
     {label.text = @"text3";} 
else if ([label.text floatValue] >= 10) 
     {label.text = @"text4";} 
else if ([label.text floatValue] == 0) 
     {label.text = @"text5";} 
+0

를? –

답변

5

당신은이 같은 문자열의 숫자 값을 비교할 수 없습니다에게 작동하지 않습니다; 이 연산은 포인터 비교를 수행한다. 이자형. 그것은 당신이 전달 문자열 인스턴스의 (오히려 무작위) 주소를 비교하여 같은 것을 사용합니다.

if ([label.text floatValue] >= 30.0) { 
} 

+0

마술사의 버튼을 제외하고는 일종의 효과가 있다고 생각할 때마다 동일한 값으로 텍스트를 설정합니다. 올바른 결과가 나올 때까지 여러 번 반복해야합니다. 그걸 어떻게 처리해야하는지 알겠습니까? –

+0

@ MattMühlemann 그건 내 대답의 문제가 아니야. 그건 당신의 코드 문제입니다. if 문에서 label.text를 검사하는 동안 label.text의 값을 수정하고 있습니다. 임시 변수를 설정 한 다음 label.text **를 if 문 외부에 설정하는 것이 좋습니다. –

+0

if 문 외부에 label.text를 설정하면 무엇을 의미합니까? 내 레이블 .text 값이 있고 해당 값에 따라 label.text 문장을 변경하려면 –

0

(여기 다른 답변에서 제안) 당신이 당신의 구문을 수정 한 후에는 여전히 것 문제가 생기면 논리 흐름에 결함이있는 것처럼 숫자 비교를 처리해야합니다. 이 30보다 작거나 같아야하는 데 실패 이후

else if ([label.text floatValue] >= 29.0) 

명확하게이보다 큰 29 인 경우 테스트 값이 30보다 큰 경우이

if ([label.text floatValue] <= 30.0) 
    {label.text = @"Text";} 
else if ([label.text floatValue] >= 29.0) 
    {label.text = @"Text";} 

을 고려, 당신은 다른 사람 다음으로 이동합니다. 따라서 첫 번째 조건이 거짓이라고 가정 할 때 다른 모든 조건은 결코 충족되지 않습니다. 두 번째 조건은 참이어야합니다.

+0

숫자 값을 다루는 경우 수정 후 논리 흐름 문제가 계속 발생합니다. – mathematician1975

+1

예 (당신이 downvote를 얻지 못한 이유입니다)하지만 이것은 그의 질문에 대한 답이 아닙니다. –

+0

충분히 공정하지만 - 그가 당신을 시정 할 때 내 대답은 그가 다음 문제를 해결하는 데 도움이 될 것입니다. 나는 당신이 당신의 구문을 수정한다고 가정한다. – mathematician1975

1

> = 또는 < = NSString*을 사용하면 해당 문자열의 내용이 아니라 주소를 비교합니다. 이 같은 비교하려는 경우, 당신은 int로 문자열을 구문 분석하고 사용하여 일반적인 정수 비교를 비교해야한다 : u는 항상 두 번째 줄 어떻게 알 수 있습니까

int val = [label.text intValue]; 
if (val > 30) { 
    ... 
} 
else ... // more of your ifs