2014-02-08 4 views
-1

Я написал алгоритм, который берет первые два и два последних объекта в массиве и добавляет их вместе. Если они добавляют друг к другу, он возвращает 2. Если они не объединяются вместе, он проверяет, встает ли второй и третий объекты и равны двум последним объектам. Поэтому в основном, если у меня есть массив [2,3,9,4,1], тогда он проверяет, есть ли 2 + 3 = 4 + 1. В этом случае да, так что было бы 2. В этом массиве [2,3,6,4,5] 2 + 3! = 4 + 5, поэтому мы перешли бы на проверку, если 3 + 6 = 4 + 5, мы возвращаем 2. Теперь, если нет двух объектов, которые при объединении могут быть равны [0,1,2,3,4], тогда он возвращает -1.Добавление объектов в массив в Objective-C

Здесь ниже:

NSMutableArray *arrayOfNumbers = [NSMutableArray array]; 
for (int x = 0; x < 15; x++) 
{ 
    [arrayOfNumbers addObject: @(arc4random_uniform(10))]; 
} 
NSLog(@"%@",arrayOfNumbers); 
int totalOfLastValues = [[arrayOfNumbers objectAtIndex:[arrayOfNumbers count] - 2]integerValue] + [[arrayOfNumbers lastObject] integerValue]; 

int mostRecentValue = [arrayOfNumbers[0] integerValue]; 
for (int i = 1; i < [arrayOfNumbers count]-3; i++) { 
    int one = mostRecentValue; 
    int two = [arrayOfNumbers[i] integerValue]; 
    mostRecentValue = two; 

    if ((one + two) == totalOfLastValues) { 
     NSLog(@"2: Because %@ + %@ = %@ + %@",arrayOfNumbers[i],arrayOfNumbers[i+1],arrayOfNumbers[[arrayOfNumbers count] - 2],[arrayOfNumbers lastObject]); 
     break; 
    } else { 
     NSLog(@"-1: Because %@ + %@ != %@ + %@",arrayOfNumbers[i],arrayOfNumbers[i+1],[arrayOfNumbers objectAtIndex:[arrayOfNumbers count] - 2],[arrayOfNumbers lastObject]); 
    } 
} 

Проблема заключается в том, что если 9 + 0 = 4 + 5, он говорит, что не равен ему, а затем он говорит, что следующий порядковый номер равен 4 + 5 , Например, вот мои NSLog's:

2014-02-07 18:54:18.170 [34341:70b] (
    9, 
    6, 
    6, 
    1, 
    2, 
    0, 
    0, 
    9, 
    7, 
    1, 
    5, 
    9, 
    9, 
    4, 
    5 
) 
2014-02-07 18:54:18.171 [34341:70b] -1: Because 6 + 6 != 4 + 5 
2014-02-07 18:54:18.172 [34341:70b] -1: Because 6 + 1 != 4 + 5 
2014-02-07 18:54:18.173 [34341:70b] -1: Because 1 + 2 != 4 + 5 
2014-02-07 18:54:18.173 [34341:70b] -1: Because 2 + 0 != 4 + 5 
2014-02-07 18:54:18.174 [34341:70b] -1: Because 0 + 0 != 4 + 5 
2014-02-07 18:54:18.174 [34341:70b] -1: Because 0 + 9 != 4 + 5 
2014-02-07 18:54:18.174 [34341:70b] 2: Because 9 + 7 = 4 + 5 

Может кто-нибудь объяснить мне, почему это происходит? Благодаря!

ответ

3

У вас есть ошибка «один за другим». Вы начинаете с индекса массива в 1 вместо 0, поэтому вам нужно вычесть 1 в NSLog. Измените операторы NSLog на следующее.

if ((one + two) == totalOfLastValues) { 
    NSLog(@"2: Because %@ + %@ = %@ + %@",arrayOfNumbers[i-1],arrayOfNumbers[i],arrayOfNumbers[[arrayOfNumbers count] - 2],[arrayOfNumbers lastObject]); 
    break; 
} else { 
    NSLog(@"-1: Because %@ + %@ != %@ + %@",arrayOfNumbers[i-1],arrayOfNumbers[i],[arrayOfNumbers objectAtIndex:[arrayOfNumbers count] - 2],[arrayOfNumbers lastObject]); 
} 
Смежные вопросы