Voting

Category

real language

Bookmarking

Del.icio.us Digg Diigo DZone Earthlink Google Kick.ie
Windows Live LookLater Ma.gnolia Reddit Rojo StumbleUpon Technorati

Language Objective C

(No Memory Leak)

Date:04/11/09
Author:Joshua Pennington
URL:n/a
Comments:1
Info:n/a
Score: (2.95 in 19 votes)
#import <Foundation/Foundation.h>

#define kWallDefaultBottles			99

@interface Wall : NSObject {
	NSUInteger _bottles;
}
- (id)initWithBottles:(NSUInteger)numBottles; // designated initializer
- (void)drinkingCascade;
- (NSUInteger)bottles;
@end

@interface Wall (Private)
- (void)setBottles:(NSUInteger)newBottles;
- (void)drinkOne;
@end

@implementation Wall
- (id)initWithBottles:(NSUInteger)numBottles {
	if (self = [super init]) {
		_bottles = numBottles;
	}
	return self;
}

- (NSUInteger)bottles { return _bottles; }

- (void)drinkingCascade {
	while ([self bottles] > 0)
		[self drinkOne];
}
@end

@implementation Wall (Private)
- (void)setBottles:(NSUInteger)newBottles { // To be KVC compliant
	_bottles = newBottles;
}

- (void)drinkOne {
	NSUInteger bottles = [self bottles];
	
	if (bottles > 1) {
		printf("%lu bottles of beer on the wall, %lu bottles of beer,\n", bottles, bottles);
		printf("Take one down, pass it around,\n");
		printf("%lu bottles of beer on the wall.\n\n", bottles-1);
	}
	else {
		printf("1 bottle of beer on the wall, 1 bottle of beer,\n");
		printf("Take one down, pass it around,\n");
		printf("No bottles of beer on the wall.\n\n");
	}
	
	[self setBottles:bottles - 1];
}
@end

int main (int argc, const char *argv[]) {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
	
	Wall *wall = [[Wall alloc] initWithBottles:kWallDefaultBottles];
	[wall drinkingCascade];
	[wall release];
	
    [pool drain];
    return 0;
}

Download Source | Write Comment

Alternative Versions

VersionAuthorDateCommentsRate
No NSLogC.W. Betts12/01/080

Comments

>>  Romko said on 02/11/10 21:04:20

Romko It could be written much easier

Download Source | Write Comment

Add Comment

Please provide a value for the fields Name, Comment and Security Code.
This is a gravatar-friendly website.
E-mail addresses will never be shown.
Enter your e-mail address to use your gravatar.

Please don't post large portions of code here! Use the form to submit new examples or updates instead!

Name:

eMail:

URL:

Security Code:
  
Comment: