我有一个简单的代码片段让我完全陷入困境。
NSInteger ymax;
NSInteger ymin;
NSInteger numberIndex1;
NSInteger numberIndex2;
for (NSNumber *theNumber in array2)
{
if ([theNumber integerValue] > ymax) {
ymax = [theNumber integerValue];
numberIndex1 = [array2 indexOfObject:theNumber];
}
}
for (NSNumber *theNumber in array2)
{
if ([theNumber integerValue] < ymin) {
ymin = [theNumber integerValue];
numberIndex2 = [array2 indexOfObject:theNumber];
}
}
NSLog(@"Highest number: %d at index: %d", ymax, numberIndex1);
NSLog(@"Lowest number: %d at index: %d", ymin, numberIndex2);
NSLog输出为:
最高人数:129171656,指数:-1073752392(嗯?)
最低数字:57指数:5(正确)
你如何解释这种奇怪的行为?两个功能看起来都一样。一个是工作,一个不是?我用这个玩过很多次,但我还是不能指责它。任何帮助将不胜感激/
答案 0 :(得分:2)
您可以获得以下代码的最大和最小数量。它可能会帮助你
NSNumber * max = [array2 valueForKeyPath:@"@max.intValue"];
NSNumber * min = [array2 valueForKeyPath:@"@min.intValue"];
NSUInteger numberIndex1 = [array indexOfObject:min];
NSUInteger numberIndex2 = [array indexOfObject:max];
NSLog(@"Max Value = %d and index = %d",[max intValue],numberIndex1);
NSLog(@"Min Value = %d and index = %d",[min intValue],numberIndex2);
答案 1 :(得分:1)
请初始化NSInteger ymax = 0; NSInteger ymin = 0; NSInteger numberIndex1 = 0; NSInteger numberIndex2 = 0; 它会解决你的问题。 否则,它会检查垃圾值并给出错误的结果。
答案 2 :(得分:1)
如果我没有错,你正在考虑NSInteger的默认值是0,不,它不能保证为零,因为它是一个本地自动变量。没有初始化,它的值是不确定的。
因此您需要为var设置默认值,从ymax = -1开始;
答案 3 :(得分:0)
享受我的回答.......快乐的编码
NSArray * arr1 = [[NSArray alloc] initWithObjects:@“0.987”,@“0.951”,@“0.881”,@“0.784”,@“0.662”,@“0.522”,@“0.381”,@ “-0.265”,@ “ - 0.197” @ “0.189”,@ “ - 0.233”,@ “0.310”,@ “0.402”,@ “0.402”,@ “0.988”,@ “0.633”,@ “0.661”,@ “0.656”,@ “0.617” ,@ “0.634”,@ “0.690”,@ “0.767”,@ “0.836”,零];
NSNumber * max = [arr1 valueForKeyPath:@"@max.floatValue"];
NSString *str=[NSString stringWithFormat:@"%@",max];
NSInteger path=[arr1 indexOfObject:str];
NSIndexPath *indepath=[NSIndexPath indexPathForItem:path inSection:0];
NSNumber * min = [arr1 valueForKeyPath:@"@min.floatValue"];
NSString *str1=[NSString stringWithFormat:@"%@",min];
NSInteger path1=[arr1 indexOfObject:str1];
NSIndexPath *indepath1=[NSIndexPath indexPathForItem:path1 inSection:0];
NSLog(@"Max Value = %f and index = %ld",[max floatValue],(long)indepath.row);
NSLog(@"Min Value = %f and index = %ld",[min floatValue],(long)indepath1.row);
答案 4 :(得分:-3)
更合理的解决方案是:
NSArray *originalArray = @[[NSNumber numberWithInt:91],
[NSNumber numberWithInt:12],
[NSNumber numberWithInt:99123],
[NSNumber numberWithInt:9],
[NSNumber numberWithInt:43234]];
NSArray *sortedArray = [originalArray sortedArrayUsingSelector:@selector(compare:)];
NSNumber *minNumber = [sortedArray objectAtIndex:0];
NSNumber *maxNumber = [sortedArray lastObject];
NSInteger minIndex = [originalArray indexOfObject:minNumber];
NSInteger maxIndex = [originalArray indexOfObject:maxNumber];