2011-12-25 3 views
0

Xcode 및 iOS 개발 유틸리티 중 일부에 익숙해지기 위해 초보자 용 앱을 개발하려고합니다. 난 이차 방정식을 해결할 수있는 응용 프로그램을 만들려고합니다. "Calculate"버튼 액션 아래에이 코드를 추가하려고했습니다. 먼저 "Calculate"를 사용하여 3 개의 입력을 합치십시오. 이제는 방정식을 풀도록 노력하고 있습니다. 이것은 내가 지금까지 뒀던 것이다. 그리고 내가 너에게 아주 새롭다는 것을 상기 시키도록. 그래서 나는 아마도 어리 석고 잘못된 것처럼 보일 것이다. Objecive C iOS 개발의 수학 방정

-(IBAction) Calculate { 

float x = ([A.text floatValue]); 
float y = ([B.text floatValue]); 
float z = ([C.text floatValue]); 

total.text =[NSString alloc]initWithFormat:@"%.2f", -y+sqrtf(y*y-4*x*z)/2*x; 

} 

나는이 전체 방정식 아니라는 것을 알고, 그러나 이것은 내가 지금까지있는 것입니다. 내가받은 오류는 세미콜론이있는 대괄호를 추가하는 것입니다. 아무도 이것이 더 효과적 이도록하는 방법을 알고 있습니까? solveEquation() 함수를 만들고 싶었지만 문제가 발생했습니다. 아무도 내가 뭘 할 수 있는지 아니? 어떤 도움을 주시면 감사하겠습니다!

+0

또한이 2 차 방정식에 [작업 순서] (http://en.wikipedia.org/wiki/Order_of_operations)가 있습니다. –

답변

3

더 많은 괄호가 필요합니다!

total.text = [[NSString alloc]initWithFormat:@"%.2f", -y+sqrtf(y*y-4*x*z)/2*x]; 

대괄호는 Objective-C 메시지를 보내고 있음을 나타냅니다. 보내시는 각 메시지마다 한 쌍의 대괄호가 필요합니다. 의이 같은를 분해하자 첫 번째 줄에서

NSString *uninitializedString = [NSString alloc]; 
NSString *initializedString = [uninitializedString initWithFormat:@"%.2f", x+y+z]; 
total.text = initializedString; 

을, 우리가 실제로 NSString의 인스턴스를 할당하는 방법을 알고있는 클래스 객체 인 NSString 객체에 alloc 메시지를 보냅니다. 하지만 이 아니라 인스턴스를 초기화합니다. 꽤 많은 메모리가 할당됩니다.

두 번째 줄에서는이 할당되었지만 초기화되지 않은 인스턴스 NSString에 메시지를 보내 템플릿 %.2f의 서식을 지정하여 초기화하도록 알립니다. 이 메시지는 NSString의 초기화 된 인스턴스를 반환합니다.

마지막으로 세 번째 줄에는 NSString이라는 초기화 된 인스턴스가 사용됩니다.

확실히 할당 된 초기화되지 않은 개체를 보관하려면 중간 변수가 항상 필요합니다. 따라서 첫 번째 메시지의 결과를 받아 직접 메시지를 보내면 제거됩니다.

total.text = [[NSString alloc] initWithFormat:@"%.2f", x+y+z]; 
+0

또한 추가하겠다.이 같은 오류는 더 간단한 형식 문자열로보기가 훨씬 쉽다. 어떤 변수를'-y + sqrtf (y * y-4 * x * z)/2 * x'로 설정 한 다음'initWithFormat :'에서 변수를 사용하면 좀 더 쉽게 파싱 할 수 있습니다. –

+0

정말 고마워요. 나중에 나를 도왔습니다. 나는 everyones 전문 기술에 감사한다!! – jtrain

3

더 많은 대괄호가 필요합니다. 올바른 구문은 [object message]이고 [NSString alloc]은 개체를 반환하므로 [[NSString alloc] initWithFormat:@"%.2f", -y+sqrtf(y*y-4*x*z)/2*x] (다른 메시지가 initWithFormat:)이 필요합니다.