【问题标题】:Repeating Number Array重复数字数组
【发布时间】:2018-12-06 04:33:25
【问题描述】:

我在创建一个接收数组中的数字并通过字符串返回它们的程序时遇到问题。我的以下代码在我的

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

这绝不是我需要解决的学校作业。我希望有一个解决方案,但是对此的指导会很棒。我觉得我几乎拥有它,因为我已经完成了与此类似的问题并得到了我需要的输出,但显然我错过了,我只是不知道是什么。我知道我的处理方法缺少代码,只是我不知道该放什么。任何帮助将不胜感激!

【问题讨论】:

    标签: ios objective-c arrays nsarray


    【解决方案1】:

    • 我需要根据您的问题为您解释数组语法,

    1. 首先可以这样声明数组@[@1,@2,....]NSNumber这个数组 对象为 Int Value ,因为数组只包含 id 对象所以我们不能直接使用 Int 但我们使用 NSnumber 像 @1

    2. 数组中的对象可以是它自己的数组,所以我们可以声明数组对象的数组 像这个例子@[@[@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 检查以上
    【解决方案2】:

    我没有正确理解你的问题,但我认为你想要一个函数,它接受一个数字数组的参数并返回一个由所有数字组合的字符串,如果这是你想要的,你可以创建一个这样的函数:-

    -(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
    

    【讨论】:

    • 我的预期输出应该是:1111111111 11, 222 10101010, 343434343434, 9292
    猜你喜欢
    • 2014-11-01
    • 1970-01-01
    • 2019-08-10
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多