为什么我在这个数组中得到错误的值?

时间:2013-10-02 16:39:11

标签: ios arrays

我有一个简单的操作,相当于在C命令行程序中正常工作,但尝试将其转换为iOS应用程序的一部分,给我的结果是我无法解决问题所在。

下面的简单操作获取参数xCoord,totalCoords和i all in OK,因为我已经测试了它们。

在最后一行中,数组的所有d值都正确打印,但e和f的值都是错误的。

鉴于数组从0开始,我在数组中将i值赋值为[i-1]。我已经尝试过报告[g-1]或[h-1]等,但没有,仍然是错误的答案。

实质上,对于totalCoords = 4,并且对于i = 1到4,g应该是4,1,2,3和h 2,3,4,1。 必须是明显的东西,但它击败了我。

-(void)updateD: (double)xCoord : (int)totalCoords : (int)i
{
    double xCoordArray[totalCoords];
    xCoordArray[i-1] = xCoord;

    g=i-1;

    if(i==1) {
        g+=totalCoords;
    }

    h=i+1;

    if(i==totalCoords) {
        h=1;
    }

    d = xCoordArray[i-1];
    e = xCoordArray[g];
    f = xCoordArray[h];
}

1 个答案:

答案 0 :(得分:0)

好的,所以...

我在这里做了一些假设。例如,我假设g和h无关,因为你没有提到它们。

另外,我假设你实际做的是“旋转”数组。

即。你有一个阵列[A,B,C,D,......,W,X,Y,Z]你想要...

d = [A, B, C, D, ... , W, X, Y, Z]
e = [Z, A, B, C, D, ... , W, X, Y]
f = [B, C, D, ... , W, X, Y, Z, A]

你似乎在某个地方循环,所以我猜你正试图从中获取数组。

我再猜测xCoordArraydouble[],即C数组不是NSArray

我所做的与此完全不同。

首先,我将值存储在NSArray中。无论如何......我最初会做这样的事情。然后我会考虑重构它。

// I'll use d, e and f in the same places you have.
NSArray *dArray;
NSArray *eArray;
NSArray *fArray;

NSMutableArray *workingArray;
NSNumber *tempNumber;

// In reality I have no idea what this is, so it's just an example.
// I have used your numbers.
NSArray *xCoordArray = @[@10, @20, @30, @40];

// Your values for d are unchanged so just use the array...
dArray = xCoordArray;

// Your values for e are rotated "forward"...
workingArray = [NSMutableArray arrayWithArray:xCoordArray];
tempNumber = [workingArray lastObject];
[workingArray removeObject:tempNumber];
// this will "push" everything forward by one index value and place the
// previous "last object" at the front.
[workingArray insertObject:tempNumber atIndex:0];
eArray = workingArray;

// Your values for f are rotated "backwards"...
workingArray = [NSMutableArray arrayWithArray:xCoordArray];
tempNumber = workingArray[0];
[workingArray removeObject:tempNumber];
[workingArray addObject:tempNumber];
fArray = workingArray;

// results...
// dArray = @[@10, @20, @30, @40];
// eArray = @[@40, @10, @20, @30];
// fArray = @[@20, @30, @40, @10];

修改

你可以使用像这样的函数重构它......

- (NSArray *)arrayByMovingTheFirstOrLastObject:(BOOL)first
                                     fromArray:(NSArray *)inputArray
{
    id tempObject;

    NSMutableArray *workingArray = [NSMutableArray arrayWithArray:inputArray];

    if (first) {
        tempObject = workingArray[0];
        [workingArray addObject:tempObject];
    } else {
        tempObject = [workingArray lastObject];
        [workingArray insertObject:tempObject atIndex:0];
    }

    return workingArray;
}

// now you can do...
eArray = [self arrayByMovingFirstOrLastObject:NO fromArray:xCoordArray];
fArray = [self arrayByMovingFirstOrLastObject:YES fromArray:xCoordArray];

我不喜欢100%的名字,但是这样的东西比现在的要好得多。