علة الكاكاو الغريبة؟
-
25-09-2019 - |
سؤال
مرحبًا يا رفاق ، تحتها جزء من الكود الذي استخدمته في مهمة مدرسية. كلما أدخلت كلمة ، مع O فيها (وهي رأس مال O) ، فإنها تفشل! كلما كان هناك واحد أو أكثر من رأس المال في هذا البرنامج ، فإنه يعيد خطأ وسجلات: الجملة ليست palindrome.
Palindrome ، للأشخاص الذين لا يعرفون ماهية palindrome ، هي كلمة هي نفس القراءة من اليمين ، والخلف. (على سبيل المثال LOL ، Kayak ، Reviver ، إلخ) لقد وجدت هذا الخطأ عند محاولة التحقق من "أقدم" Palindrome على الإطلاق: Sator Arepo Tenet Opera Rotas.
عندما أقوم بتغيير كل رأس المال إلى Sudrase O's ، فإنه يعمل ، ويعيد صحيحًا. اسمحوا لي أن أذكر بوضوح ، مع هذا الجزء من الكود جميع الجمل/الكلمات مع عودة رأس المال O. رأس مال واحد يكفي لفشل هذا البرنامج.
-(BOOL)testForPalindrome:(NSString *)s position:(NSInteger)pos {
NSString *string = s;
NSInteger position = pos;
NSInteger stringLength = [string length];
NSString *charOne = [string substringFromIndex:position];
charOne = [charOne substringToIndex:1];
NSString *charTwo = [string substringFromIndex:(stringLength - 1 - position)];
charTwo = [charTwo substringToIndex:1];
if(position > (stringLength / 2)) {
NSString *printableString = [NSString stringWithFormat:@"De following word or sentence is a palindrome: \n\n%@", string];
NSLog(@"%@ is a palindrome.", string);
[textField setStringValue:printableString];
return YES;
}
if(charOne != charTwo) {
NSLog(@"%@, %@", charOne, charTwo);
NSLog(@"%i", position);
NSLog(@"%@ is not a palindrome.", string);
return NO;
}
return [self testForPalindrome:string position:position+1];
}
إذن ، هل هذا بعض الأخطاء الغريبة في الكاكاو؟ أم هل فاتني شيء؟
- ب
المحلول
هذا بالطبع ليس خطأ في الكاكاو ، كما عرفت على الأرجح في أعماق الداخل.
تسبب طريقة المقارنة الخاصة بك هذه "الخطأ في الكاكاو" ، فأنت تقارن عناوين Charone و Chartwo. بدلاً من ذلك ، يجب عليك مقارنة محتويات السلسلة مع رسالة isequaltostring.
يستخدم:
if(![charOne isEqualToString:charTwo]) {
بدلاً من:
if(charOne != charTwo) {
تحرير: اختباره في مشروع اختبار ويمكن أن يؤكد أن هذه هي المشكلة.
نصائح أخرى
لا تستخدم charOne != charTwo
بدلا من ذلك استخدم أحد NSString مقارنة الأساليب.
if ([charOne caseInsensitiveCompare:charTwo] != NSOrderedSame)
قد يكون له علاقة مع التوطين (لكني أشك في ذلك).