gpt4 book ai didi

ios - 在 IOS 上创建随机字母数字

转载 作者:行者123 更新时间:2023-11-28 22:22:46 25 4
gpt4 key购买 nike

我是 Java 程序员,“必须”转向 obj-C 一段时间,

我在生成随机字母数字代码时有些困惑...这是我的 javacode:

PS:我想生成这样的代码:Gh12PU67、AC88pP13、Bk81gH89

private String generateCode(){
String code = "";
Random r = new Random();
char[] c = new char[]{'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};

for(int i = 0; i<4; i++){
int uplow = r.nextInt(2);
String temp = ""+ c[r.nextInt(c.length)];
if(uplow==1)
code = code + temp.toUpperCase();
else
code = code + temp;

if((i+1)%2==0){
code += r.nextInt(10);
code += r.nextInt(10);
}
}

return code;
}

然后我在 OBJ-C 上创建

-(void)generateCode{
NSString *alphabet = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXZY0123456789";
NSMutableString *s = [NSMutableString stringWithCapacity:4];
for (NSUInteger i = 0U; i < 4; i++) {
u_int32_t r = arc4random() % [alphabet length];
unichar c = [alphabet characterAtIndex:r];
[s appendFormat:@"%C", c];

}
NSLog(@"s-->%@",s);
}

但我得到的结果是“HpNz” AC88pP13 insted hve pattern String,string, numeric,numeric, lowescase string,numeric,numeric...

那个案子毁了我 3 天的生活......

最佳答案

您的 Objective-C 代码看起来不错,但是(正如@Wain 在上面的评论中正确所说),Java 函数函数包含在 2 个字母后插入 2 个数字的逻辑,您可以尚未在 Objective-C 方法中复制。

我会让这个逻辑稍微不那么晦涩,然后把它写成

- (void)generateCode
{
static NSString *letters = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXZY";
static NSString *digits = @"0123456789";
NSMutableString *s = [NSMutableString stringWithCapacity:8];
for (NSUInteger i = 0; i < 2; i++) {
uint32_t r;

// Append 2 random letters:
r = arc4random_uniform((uint32_t)[letters length]);
[s appendFormat:@"%C", [letters characterAtIndex:r]];
r = arc4random_uniform((uint32_t)[letters length]);
[s appendFormat:@"%C", [letters characterAtIndex:r]];

// Append 2 random digits:
r = arc4random_uniform((uint32_t)[digits length]);
[s appendFormat:@"%C", [digits characterAtIndex:r]];
r = arc4random_uniform((uint32_t)[digits length]);
[s appendFormat:@"%C", [digits characterAtIndex:r]];

}
NSLog(@"s-->%@",s);
}

备注(来自手册页):arc4random_uniform(length) 优于 arc4random() % length,因为当上限不是 2 的幂时,它避免了“模数偏差”。

备注:Java 代码的更逐字翻译 code += r.nextInt(10);到 Objective-C 将是

r = arc4random_uniform(10);
[s appendString:[@(r) stringValue]];

它根据随机数创建一个 NSNumber 对象 @(r),然后将其转换为字符串。

关于ios - 在 IOS 上创建随机字母数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19873872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com