2012-12-15 1 views
2

Я пытаюсь построить хороший класс треугольника, видя, что я использую их много. Я решил изменить свой класс, чтобы пользователь мог установить bool, чтобы использовать градусы, а не радианы. Каждая вещь, по-прежнему, кажется, работает, как должно, кроме этого описания, интересно:Objective-C Описание не ведет себя так, как я ожидал.

IMTriangle *tri = [[IMTriangle alloc]init]; 
    tri.shouldUseDegrees = YES; 
    tri.SideA = 3; 
    tri.SideB = 4; 
    tri.SideC = 5; 

    [tri solve]; 
    NSLog(@"tri %@", tri); 
    double A = tri.angleA; 
    double B = tri.angleB; 
    double C = tri.angleC; 
    NSLog(@"A = %f B = %f C = %f",A,B,C); 
    NSLog(@"tri %@",tri); 

дает мне это

tri a=3.0000 b=4.0000 c=5.0000 A=0.6435 B=0.9273 C=1.5708 perimeter=6.0000 area=12.0000 height=4.0000 shouldUseDegrees 1 
A = 36.869897 B = 53.130098 C = 90.000004 
tri a=3.0000 b=4.0000 c=5.0000 A=36.8699 B=53.1301 C=90.0000 perimeter=6.0000 area=12.0000 height=4.0000 shouldUseDegrees 1 

После я получаю углы от моего объекта треугольника, чтобы использовать их, его описание вдруг это как и следовало ожидать. Я не знаю, если это что-то делать с пользовательскими сеттеров и добытчиками, я использую:

-(void) setAngleA:(double)angleA 
{ 
    if (!_shouldUseDegrees){ 
     _angleA = angleA; 
    } 
    else _angleA = angleA * M_PI/180; 
} 
-(double) angleA 
{ 
    if (!_shouldUseDegrees) { 
     return _angleA; 
    } 
    return _angleA *= 180/M_PI; 
} 

или мое описание метода

-(NSString *) description; 
{ 

    return [NSString stringWithFormat:@"a=%.4f b=%.4f c=%.4f A=%.4f B=%.4f C=%.4f perimeter=%.4f area=%.4f height=%.4f shouldUseDegrees %i", _sideA , _sideB , _sideC , _angleA , _angleB , _angleC , self.area , self.perimeter , self.height ,_shouldUseDegrees]; 

} 

ответ

2

У вас есть две проблемы.

Во-первых, вам нужно остановить переназначение _angleA в вашем аксессору:

return _angleA *= 180/M_PI; 

Это должно быть:

return _angleA * 180/M_PI; 

Другой является то, что вы хотите, чтобы ваш распечатку в градусах. Поскольку ваша переменная экземпляра всегда содержит радианы, измените значение _angleA, _angleB, _angleC на номер self.angleA, self.angleB, self.angleC, чтобы вызвать ваши пользовательские аксессоры вместо печати значений переменных экземпляра.

 Смежные вопросы

  • Нет связанных вопросов^_^