2010-03-08 2 views
1

기본적으로 계산기 응용 프로그램에서 특정 매개 변수를 사용할 때 문제가 발생합니다. 잘못된 결과를 만듭니다. 문제는 내가 몇 시간 동안 별도의 텍스트 필드를 가지고 있으며 예를 들어 시작 시간이 "13"이고 다른 텍스트 필드가 "30"이고 완료 시간이 "24"및 "00"인 경우를 말합니다. 각각의 텍스트 필드. 응답은 10 시간 30 분이어야하지만, 내가 얻는 대답은 11 시간 30 분입니다. 이에 대한 코드는 다음과 같습니다.계산 수수께끼 - 다른 텍스트 필드에 어떻게 영향을 줍니까?

-(IBAction)done:(id)sender { 
    int result = [finishHours.text intValue] - [startHours.text intValue]; 
    totalHours.text = [NSString stringWithFormat:@"%d", result]; 
    if (result < 0) { 
    totalHours.text = [NSString stringWithFormat:@"%d", result + 24]; 
    } 



    -(IBAction)done2:(id)sender { 
    int result = [startMinutes.text intValue] - [finishMinutes.text intValue]; 
    totalMinutes.text = [NSString stringWithFormat:@"%d", result]; 
    if (result < 0) { 
    totalMinutes.text = [NSString stringWithFormat:@"%d", result + 60]; 
    } 
} 

나는 특정 매개 변수가 충족되는 경우, 다음 totalHours.text이 전체 분을 반영하기 위해 1 시간 감소, 그래서 그것을 만들고 싶어. 코드에서 어떻게 계산할 것인가?

감사합니다.

+0

아이폰 태그를 추가했습니다. 아이폰에 대한 objectivec와 비슷하기 때문입니다. 죄송 합니다만 잘못된 경우 언제든지 태그를 제거하십시오. –

답변

2

먼저 시작 및 종료 시간을 단일 단위 (분)로 변환하고 분을 뺀 다음 시간 : 분으로 다시 변환해야합니다.

예를 들어, startHours * 60 + startMinutes로 계산 startTotalMinutes. 완료 시간과 동일하게하십시오. finishTotalMinutes에서 startTotalMinutes를 뺍니다. 0보다 낮은 결과를 보상하십시오 (저는 단지 1440을 추가한다고 생각합니다). 그 결과를 시간 : 분으로 다시 변환하십시오. 몇 시간 동안 결과 mod 60을하고 나머지는 결과 분입니다.

편집 : 다음은 요청한 코드 예제입니다. 다만 분 INT 분만 텍스트 : 또한 시간 결과 (60)에 의해 분할되어 상기 분가이 결과 개조를 60

- (int)hoursMinutesTextToMinutes:(NSString *)hoursText minutesText:(NSString *)minutesText 
{ 
    return [hoursText intValue] * 60 + [minutesText intValue]; 
} 

-(IBAction)done:(id)sender 
{ 
    int startTotalMinutes = [self hoursMinutesTextToMinutes:startHours.text minutesText:startMinutes.text]; 
    int finishTotalMinutes = [self hoursMinutesTextToMinutes:finishHours.text minutesText:finishMinutes.text]; 

    int difference = finishTotalMinutes - startTotalMinutes; 
    if (difference < 0) 
    { 
     difference += 1440; 
    } 

    int diffHours = difference/60; 
    int diffMinutes = difference % 60; 

    totalHours.text = [NSString stringWithFormat:@"%d", diffHours]; 
    totalMinutes.text = [NSString stringWithFormat:@"%d", diffMinutes]; 
} 

hoursMinutesTextToMinutes 시간을 반환하는 헬퍼 메소드이다 것을 보정 참고. 이렇게하면 해당 코드가 중복되지 않습니다.

하나의 버튼 동작 만 필요합니다 ("완료"사용).

입력 한 텍스트에 대해 유효성 검사를 수행하지 않습니다. 유효성을 추가하거나 UIDatePicker를 사용하여 사용자가 시작/종료 시간을 지정할 수 있도록해야합니다.

+0

또 다른 것은 두 가지 작업 방법이 필요 없다는 것입니다. 클릭 할 때 위의 논리를 수행하는 버튼이 하나만 있으면됩니다. – DyingCactus

+0

코드에 대해 어떻게 설명하겠습니까? 수학은 내 전문 분야가 아니 었습니다. :/ – LawVS

+0

코드 예제를 추가했습니다. – DyingCactus

관련 문제