需要帮助编写简单的Objective-C程序

时间:2013-11-04 19:45:29

标签: objective-c class geometry

我几周来一直在与一个在线Objective-c课程一起奋斗。我感觉非常愚蠢.. 我最近的任务是编写一个程序,通过询问用户圆的半径,创建一个圆形对象,然后报告圆的面积,直径和周长来演示一个名为Circle的类。 我们应该有以下成员变量:

radius:  a double
pi: a double initialized to 3.14159

以及以下成员函数:

setRadius - a mutator function for the radius variable
getRadius - an accessor function for the radius variable
getArea - returns the area of the circle, which is calculated as:    area = pi * radius * radius
getDiameter - returns the diameter of the circle, which is calculated as:   diameter = radius * 2
getCircumference - returns the circumference of the circle, which is calculated as:   circumference = 2 * pi * radius

该类的成员变量应设置为private。

到目前为止,这是我的计划:

主:

int main(int argc, const char * argv[])
{

    @autoreleasepool {

        int radius;

        NSLog(@"Enter the circles radius:");
        scanf ("%d", &radius);





    }
    return 0;
}

接口:

#import <Foundation/Foundation.h>

//circle class

@interface circle : NSObject

{ @private

-(double)      radius;
-(double)      pi;

}

@property int setRadius, getRadius;

-(double)      getArea;
-(double)      getDiameter;
-(double)      getCircumcerence;


@end

实施:

#import "circle.h"

@implementation circle

@synthesize setRadius, getRadius;


-(double) pi
{
    pi = 3.14159;
}

-(double) getArea
{
    pi * radius * radius;
}

-(double) getDiameter
{
    radius * 2;
}

-(double) getCircumcerence
{
    2 * pi * radius;
}
@end

正如你所看到的,我没有走得太远。我很困惑如何在我的主要方面简单地使用我的方法,并且我确定我已经犯了错误。

任何建议表示赞赏!我真的需要帮助,而且时间紧迫。 此外,这可能是牵强附会,但如果有人可以跟我一起skype并帮助我完成它? 谢谢!

2 个答案:

答案 0 :(得分:2)

首先,您应该将.h设置为更像这样的内容:

@interface Circle : NSObject

@property double radius;
@property (readonly) double area;
@property (readonly) double diameter;
@property (readonly) double circumference;
@property (readonly) double pi;

-(id)initWithRadius:(double)r;

+(instancetype)circleWithRadius:(double)r;

@end

这将为setter设置getterradius,为gettersarea和{{1}设置diameter }}。它还为circumference设置了initfactory方法,该方法的半径为双倍。

我将返回并修改您需要对circle以及.m文件进行的一些修改,以便完成这项工作。请注意,我们至少会覆盖3 main个属性的getters。这将阻止编译器为这些属性创建readonly(实例变量)(因为我们可以在计算它时计算并返回我们计算的数字)。

ivars

.m

#import Circle.h @implementation Circle -(id)initWithRadius:(double)r { self = [super init]; if(self) { self.radius = r; } return self; } +(instancetype)circleWithRadius:(double)r { return [[Circle alloc] initWithRadius:r]; } -(void)setRadius:(double)r //This method is automatically created by @property { //include any verification logic (make sure r>0 etc), then... self.radius = r; } //we don't really need to override the radius getter -(double)pi { return 3.14159; //or however much accuracy you want } -(double)area { return (self.pi * self.radius * self.radius); } -(double)diameter { return (2.0 * self.radius); } -(double)circumference { return (self.diameter * self.pi); } 中,您可以像使用Objective-C中的任何其他对象一样使用此main类(考虑CircleNSString等)

NSArray

答案 1 :(得分:0)

当然有很多方法可以解决这个问题。我记得在开始时感到困惑,下面是另一个给你一些其他东西看的例子。

它不是花哨的,而只是简单的,所以你可以看到使用初始化程序的类的最小设置。

请注意,初始化的唯一值是const pi,当然,也可以在那里初始化半径,因为nhgrif的示例非常好。

希望这有帮助!

//  Circle.h

#import <Foundation/Foundation.h>

@interface Circle : NSObject
{
    double radius;
    double pi;
}

@property double radius, pi;

-(double) getArea;
-(double) getDiameter;
-(double) getCircumference;

@end

然后执行:

//  Circle.m

#import "Circle.h"

@implementation Circle

@synthesize radius, pi;

// Initialize with const pi:
- (id)init {
    self = [super init];
    if (self) {
        pi = 3.14159;
        NSLog(@"Circle created.");
    }
    return self;
}

-(double) getArea {
    return pi*radius*radius;
}

-(double) getDiameter {
    return 2*radius;
}

-(double) getCircumference {
    return 2*pi*radius;
}

@end

然后是主要的:

//  main.m

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

int main(int argc, const char * argv[])
{
    @autoreleasepool {

        Circle *aCircle = [[Circle alloc] init];

        // Use an arbitrary value:            
        [aCircle setRadius:2];

        NSLog(@"Area = %f",[aCircle getArea]);
        NSLog(@"Circumference = %f",[aCircle getCircumference]);
        NSLog(@"Diameter = %f",[aCircle getDiameter]);
        NSLog(@"Check pi = %f",[aCircle pi]);

    }
    return 0;
}