У меня возникли проблемы с созданием программы, которая принимает числа в массиве и возвращает их в виде строки. Мой следующий код в моем
файл main.m:
#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;
}
Код в моем файле NumberRepeater.h:
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface NumberRepeater : NSObject
- (instancetype)initWithNumbers:(NSArray *)numbers;
- (NSString *)process;
@end
NS_ASSUME_NONNULL_END
Код в моем файле NumberRepeater.m:
#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
Мой ожидаемый результат должен быть:
1111111111
11, 222
10101010, 343434343434, 9292
Это вовсе не школьное задание, которое мне нужно решать. Я хотел бы получить решение, однако руководство к нему было бы отличным. Я чувствую, что у меня это почти есть, поскольку я задавал вопросы, подобные этому, и получил результат, который мне нужен, но мне явно не хватает, я просто не знаю, что. Я понимаю, что в моем методе процесса отсутствует код, просто я не знаю, что туда вставить. Любая помощь будет принята с благодарностью!





Я не понял ваш вопрос должным образом, но я думаю, что вам нужна функция, которая принимает аргументы в виде массива чисел и возвращает строку, объединенную всеми числами, если это то, что вы хотели, вы можете создать такую функцию: -
-(NSString *)getStringFromArray:(NSArray <NSNumber *> *)array{
NSString *numberString = @"";
for (NSNumber *no in array) {
numberString = [numberString stringByAppendingString:no.stringValue];
}
return numberString;
}
Вызовите метод в своем классе следующим образом: -
NSLog(@"Number String %@",[self getStringFromArray:@[@1,@2,@3,@4]]);
Вывод
Number String 1234
• Мне нужно объяснить вам синтаксис массива в соответствии с вашим вопросом,
Сначала вы можете объявить массив таким образом @[@1,@2,....], это массив NSNumber
объект как значение Int, потому что массив содержит только объекты id, поэтому мы не можем использовать Int напрямую, но мы используем NSnumber, как это @ 1
объекты внутри массива могут быть самим массивом, поэтому мы можем объявить массив объекта массива
как в этом примере @[@[@10, @4], @[@3, @6], @[@2, @9]] этот массив массива
@[@[],@[],....etc]
• по вашему вопросу даю вам NSArray с двумя предметами
просто верните мне строку, в которой первый элемент повторяется (второй элемент) раз
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
Решение
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;
}
Спасибо за ваш ответ. Так что же должен содержать файл main.m?
Просто укажите свой вопрос
@OmieiOS проверьте выше
Мой ожидаемый результат должен быть: 1111111111 11, 222 10101010, 343434343434, 9292