我有一个简单的操作,相当于在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];
}
答案 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]
你似乎在某个地方循环,所以我猜你正试图从中获取数组。
我再猜测xCoordArray
是double[]
,即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%的名字,但是这样的东西比现在的要好得多。