программа не отображает простые побочные значения для моего объекта треугольника в nslog - PullRequest
1 голос
/ 05 января 2010

Файл проекта здесь, если вы хотите скачать: http://files.me.com/knyck2/918odc

Итак, я работаю над книгой «Программирование в Objective c 2.0» и работаю над упражнением 8.5, где вы должны собрать группу классов и создать подкласс самодельного абстрактного класса в квадратный класс, класс треугольника и класс круга. Вы также должны рассчитать площадь и периметр / окружность с помощью методов для каждого объекта и отобразить их в nslog.

Все в значительной степени установлено, но некоторые странные значения возвращаются, когда я отображаю размер каждой стороны из моего класса треугольника, и я не уверен, почему. одна из сторон отображается как 0,000000, а две другие отображаются как эти огромные числа с плавающей запятой / двойные числа:

521556413499497987605515504756958465074645713473678706698073680750705671496313493175192637227720116636212033961634738517717834352497805734697302078530634879721347399811072.000000

и

661675923659048238438515844320261245751425513854584815925028483891542482488445146590620251584462848.000000

Когда я иду к отладке, кажется, что все значения назначаются правильно, поэтому я не понимаю, почему это так весело.

Спасибо за любую помощь, вы можете предоставить,

Ник

вот главное:

#import <Foundation/Foundation.h>
#import "Rectangle.h"
#import "Triangle.h"
#import "Circle.h"

int main (int argc, const char * argv[])
{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    Rectangle *myRect = [[Rectangle alloc] init];
    Circle    *myCircle = [[Circle alloc] init];
    Triangle *myTriangle = [[Triangle alloc] init];

    myRect.fillColor = 12345;
    myRect.filled = NO;
    myRect.lineColor = 29999;
    [myRect setWidth:15.3 andHeight:22.3];

    NSLog(@"the rectangle has a filled color of %i,line color of %i",
            myRect.fillColor, myRect.lineColor);

    if (myRect.filled == YES) 
        NSLog(@"The rectangle is also filled");
    else if (myRect.filled == NO) 
    NSLog(@"The rectangle is not filled");

    NSLog(@" rectangle %f, %f, area %f, perimeter %f",
           myRect.w , myRect.h, myRect.area, myRect.perimeter);                    

    myCircle.fillColor = 15555;
    myCircle.filled = NO;
    myCircle.lineColor = 32349;
    [myCircle setR:15.2];

    NSLog(@"the circle has a radius of %f ,color of %i, line color of %i",
           myCircle.r, myCircle.fillColor, myCircle.lineColor);

    NSLog(@"Also the circles area is %f and the circumference is %f",
            myCircle.area, myCircle.circumference  );


    myTriangle.fillColor = 71611;
    myTriangle.filled = NO;
    myTriangle.lineColor = 78998;
    [myTriangle setSide1:13];
    [myTriangle setSide2:19];
    [myTriangle setSide3: 27.5];

    NSLog(@"triangle sides %g, %g and %g."),  // << error
            myTriangle.side1 , myTriangle.side2 , myTriangle.side3 ;
    NSLog(@"triangle area %f, perimeter %f.",
            myTriangle.area, myTriangle.perimeter );
    NSLog(@"triangle fill color %i, line color %i",
            myTriangle.fillColor, myTriangle.lineColor);

    [myCircle release];
    [myRect release];
    [myTriangle release];

    [pool drain];
    return 0;

} * * тысяча двадцать-один

и вот интерфейс и реализация:

#import <Foundation/Foundation.h>
#import "GraphicObject.h"

@interface Triangle : GraphicObject 
{
    double side1;
    double side2;
    double side3;
}

@property double side1, side2, side3;

-(void) setSides: (double)s1: (double)s2 : (double)s3;
-(double) area;
-(double) perimeter;

@end

Triangle.m

#import "Triangle.h"
#import <math.h>

@implementation Triangle
@synthesize side1, side2, side3;

-(void) setSides: (double) s1: (double) s2:(double) s3
{
    side1 = s1; 
    side2 = s2;
    side3 = s3;
}

-(double) area
{
    return sqrt(  (side1 + side2 + side3) 
                * (side1 + side2 - side3)
                * (side2 + side3 - side1)
                * (side3 + side1 - side2) / 16);
}

-(double) perimeter
{
    return side1 + side2 + side3;
}
@end

также здесь есть суперкласс, GraphicObject.h

#import <Foundation/Foundation.h>    
@interface GraphicObject : NSObject 
{
    int fillColor; 
    BOOL filled; 
    int lineColor;  
}

@property int fillColor, lineColor;
@property BOOL filled;
@end

GraphicObject.m

#import "GraphicObject.h"
@implementation GraphicObject
@synthesize fillColor, lineColor, filled;
@end

1 Ответ

3 голосов
/ 05 января 2010

Проблема в этой строке:

NSLog(@"the triangle has the sides of sizes %g, %g and %g."), myTriangle.side1 , myTriangle.side2 , myTriangle.side3 ;

Использование ) перед , означает, что ваш вызов NSLog не предоставляет значений для замены этих %g при форматировании для вывода. Это кажется непреднамеренным, как говорил мой старый друг: «Все ошибки происходят от копирования и вставки .... все из них».

Исправление состоит в том, чтобы переместить ) непосредственно перед ; следующим образом:

NSLog(@"the triangle has the sides of sizes %g, %g and %g.", myTriangle.side1 , myTriangle.side2 , myTriangle.side3);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...