سؤال

سأصل إلى هذا السريع: لدي تطبيق لـ iPhone OS 3.1.2 من شأنه أن يقلل الكسور. لدي 4 منافذ:

  1. Otop و Obottom: اثنين من uitextfields ، يقف على OriginalTop و OriginalBottom.
  2. RTOP و RBOTTOM: اثنين من Uilabels ، يقف على lowuredtop و lowuctedbottom.

هنا هو الرمز الذي أستخدمه:

-(ibacte) تقليل {

int numerator = [[oTop text] intValue];
int denominator = [[oBottom text] intValue];
if (denominator > 0) {
    NSMutableArray *factors1 = [[NSMutableArray alloc] init];
    NSMutableArray *factors2 = [[NSMutableArray alloc] init];
    int factors1length;
    int factors2length;
    for (int i = 1; i < ceil(sqrt(numerator)); i ++) {
        [factors1 addObject:[NSString stringWithFormat:@"%@", i]];
        if (round(numerator / i) != numerator / i) {
            [factors1 removeLastObject];
        } else {
            factors1length ++;
        }
    }
    for (int i = factors1length; i <= 0; i --) {
        [factors1 addObject:[NSString stringWithFormat:@"%@", (numerator / [[factors1 objectAtIndex:i] intValue])]];
    } //End get numerator factors
    for (int i = 1; i < ceil(sqrt(denominator)); i ++) {
        [factors2 addObject:[NSString stringWithFormat:@"%@", i]];
        if (round(denominator / i) != denominator / i) {
            [factors2 removeLastObject];
        } else {
            factors2length ++;
        }
    }
    for (int i = factors2length; i <= 0; i --) {
        [factors2 addObject:[NSString stringWithFormat:@"%@", (denominator / [[factors2 objectAtIndex:i] intValue])]];
    } //End get denominator factors 
}

}

آسف على خطوط طائشة. على أي حال ، هل يمكن لأحد أن يخبرني ما الذي يحدث؟ عندما أقوم بتشغيل ، اكتب رقمًا في كل من حقول النص ، أكبر من 0 ، واضغط على زر "تقليل" ، تعطل التطبيق. الرجاء المساعدة ،

مرحبا يا صاح

تحرير: تغيير الأول والثالث للحلقات من (int i = 0 إلى (int i = 1.

هل كانت مفيدة؟

المحلول

يبدو في أول حلقة من أجل I ، وأنا أبدأ في 0 وينقسم على i (وهو صفر).

تحرير: كانت هناك مشكلة واحدة قبل الفجوة الفجوة التي تسببت في الانهيار الأولي والعديد من الآخرين بعد ذلك.

  1. في الحلقة الأولى ، يتم AddObject باستخدام @"٪ @" ولكن هذا يجب أن يكون @"٪ d" لأنني عدد صحيح وليس سلسلة. يرى مواصفات تنسيق السلسلة.

  2. يجب تهيئة العوامل 1length و charce2length إلى الصفر وإلا فإنها ستبدأ بقيم عشوائية والتي ستتخلص من بقية الكود.

  3. يحتاج AddObject في الحلقة الثانية إلى استخدام @"٪ f" بدلاً من @"٪ @" لأنك تحاول استخدام قيمة نقطة عائمة هناك (البسط / xxx ...). ومع ذلك ، هناك مشاكل في نهج تخزين الأرقام في صفيفك كأوامر. أولاً ، أنت تقوم بتخزين بعض ints وبعضها يطفو. التمسك بنوع واحد. ثانياً ، من الأفضل تخزين الأرقام كأرقام بدلاً من التحويل إلى سلسلة وظهر. يمكنك تخزين ints/floats في nsmutablearray عن طريق تحويلها إلى كائن nsnumber.

إذا لم تكن قد فعلت ذلك بالفعل ، فيرجى أخذ نصيحة Cdespinosa وتخطو السطر الكود One في وقت واحد في مصحح الأخطاء ومعرفة القيم التي يتمتع بها المتغيرات وما هي الرمز الذي يتم تنفيذه بالضبط.

أوصي أيضًا بعدم محاولة وضع الكثير من المنطق في سطر واحد. على سبيل المثال ، يقوم خط AddObject في الحلقة الثانية بعمل الكثير مما يجعل من الصعب رؤية المشكلة. قم بتفكيكها بإعلان المتغيرات المحلية لتخزين قيم التعبيرات داخل الخط.
لذا بدلاً من هذا:

[factors1 addObject:[NSString stringWithFormat:@"%@", (numerator / [[factors1 objectAtIndex:i] intValue])]];

اكتبها مثل هذا:

int iFactor = [[factors1 objectAtIndex:i] intValue];
float value = (numerator / iFactor);
NSString *newFactor = [NSString stringWithFormat:@"%@", value];
[factors1 addObject:newFactor];

هذا سيجعل من الأسهل تصحيح.

نصائح أخرى

قد ترغب في النظر في خوارزمية إقليدس لإيجاد أعظم مقسوم مشترك من اثنين من الأعداد الصحيحة. إنها أسرع بكثير (وحتى أسهل في الترميز) من العوملة. هناك تنفيذ عينة في مقالة ويكيبيديا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top