I am having trouble creating a program that takes in numbers in an Array and returns them by a string. My following code in my
main.m file:
#import <Foundation/Foundation.h>
#import "NumberRepeater.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
NumberRepeater *repeater1 = [[NumberRepeater alloc]
initWithNumbers: @[@[@1, @10]]];
[repeater1 initWithNumbers:@[@[@1, @10]]];
NSLog(@"%@", [repeater1 process]);
NumberRepeater *repeater2 = [[NumberRepeater alloc]
initWithNumbers: @[@[@1, @2], @[@2, @3]]];
NSLog(@"%@", [repeater2 process]);
NumberRepeater *repeater3 = [[NumberRepeater alloc]
initWithNumbers: @[@[@10, @4], @[@34, @6], @[@92, @2]]];
NSLog(@"%@", [repeater3 process]);
}
return 0;
}
The code in my NumberRepeater.h file:
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface NumberRepeater : NSObject
- (instancetype)initWithNumbers:(NSArray *)numbers;
- (NSString *)process;
@end
NS_ASSUME_NONNULL_END
The code in my NumberRepeater.m file:
#import <Foundation/Foundation.h>
#import "NumberRepeater.h"
@implementation NumberRepeater
- (instancetype)initWithNumbers:(NSArray *)numbers {
NumberRepeater *repeater1 = [[NumberRepeater alloc]
initWithNumbers: @[@[@1, @10]]];
[repeater1 initWithNumbers:@[@[@1, @10]]];
NSLog(@"%@", repeater1);
return 0;
}
- (NSString *)process {
return 0;
}
@end
My expected output should be:
1111111111
11, 222
10101010, 343434343434, 9292
This is in no way a school assignment I need solving. I would love a solution however guidance to that would be great. I feel like I almost have it as I have done questions similar to this and have got the output I need but clearly I am missing, I just don't know what. I understand my process method is missing code, it's just I don't exactly know what to put in there. Any help would be greatly appreciated!
• I need to Explain Array syntax for you according to your question ,
First you can declare array in this way @[@1,@2,....]
this array of NSNumber
object as Int
Value , because array contain id objects only so we can't user Int directly but we user NSnumber like that @1
objects inside array can be Array its self so we can declare array of array object
like this example @[@[@10, @4], @[@3, @6], @[@2, @9]]
this array of array
@[@[],@[],....etc]
• according to your question i I give you NSArray
with two items
just give me back a String with first item repeated (second item) times
Example :
Input @[@1,@2] repeat number#1 two times
Output should be 11
Input @[@1,@10] repeat number#1 10 times
Output should be 1111111111
Input @[@[@1,@3],@[@3,@4]] repeat number#1 3 times , number#3 4 time
Output should be 111 3333
Solution
NumberRepeater.h
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface NumberRepeater : NSObject {
NSArray * numbers; // private number array will be initialized during initialization of object
}
- (instancetype)initWithNumbers:(NSArray *)numbers;
- (NSString *)process;
@end
NS_ASSUME_NONNULL_END
NumberRepeater.m
#import "NumberRepeater.h"
#import <Foundation/Foundation.h>
// NumberRepeater Extention for set private numbers
@interface NumberRepeater ()
@property (nonatomic,retain) NSArray *numbers;
@end
@implementation NumberRepeater
@synthesize numbers;
- (instancetype)initWithNumbers:(NSArray *)numbers {
self = [super init];
if (self) {
self.numbers = numbers;
}
return self;
}
- (NSString *)process {
// if numbers have No Data
if (numbers.count == 0) { return @"0"; }
// Array of array each array have two element first is number to repeat and second have number of repetation
// Example @[@1, @2] repeat number(1) TWO times so out put should be 11
// @[@[@1, @2], @[@2, @3]]
NSMutableString * output = [NSMutableString new];
for (NSArray*item in numbers) {
// Array should be with this Format
// Example @[@1, @2] repeat number(1) TWO times
// assert item have tow items only like that @[@1,@2]
NSAssert(item.count == 2,@"Array Should have Two items only");
NSNumber *numberToRepeat = item[0]; // repeat
NSNumber *repetitionCount = item[1]; //repetition Count
NSMutableString * repeatdString = [NSMutableString new];
for (NSInteger i= 0; i < [repetitionCount integerValue] ; i++) {
[repeatdString appendString:[numberToRepeat stringValue]];
}
[output appendString:repeatdString];
[output appendFormat:@" "]; // space on join with muti array
}
return output;
}
@end
main.m
#import <Foundation/Foundation.h>
#import "NumberRepeater.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
NumberRepeater *repeater1 = [[NumberRepeater alloc]
initWithNumbers: @[@[@1, @10]]];
NSLog(@"%@", [repeater1 process]);
NumberRepeater *repeater2 = [[NumberRepeater alloc]
initWithNumbers: @[@[@1, @2], @[@2, @3]]];
NSLog(@"%@", [repeater2 process]);
NumberRepeater *repeater3 = [[NumberRepeater alloc]
initWithNumbers: @[@[@10, @4], @[@34, @6], @[@92, @2]]];
NSLog(@"%@", [repeater3 process]);
}
return 0;
}