0

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

下面的简单操作会获取参数 xCoord、totalCoords 和 i,因为我已经对其进行了测试。

在最后一行中,数组的所有 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];
}
4

1 回答 1

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% 的名字,但这样的名字比你现在拥有的要好得多。

于 2013-10-02T18:35:40.040 回答