Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone NSMutableArray的最小值和最大值_Iphone_Ios_Objective C_Nsmutablearray - Fatal编程技术网

Iphone NSMutableArray的最小值和最大值

Iphone NSMutableArray的最小值和最大值,iphone,ios,objective-c,nsmutablearray,Iphone,Ios,Objective C,Nsmutablearray,我有一段看起来很简单的代码,让我完全不知所措 NSInteger ymax; NSInteger ymin; NSInteger numberIndex1; NSInteger numberIndex2; for (NSNumber *theNumber in array2) { if ([theNumber integerValue] > ymax) { ymax = [theNumber integerValue]; numberIndex

我有一段看起来很简单的代码,让我完全不知所措

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);
NSInteger-ymax;
恩森特格伊明;
NSInteger数dex1;
NSInteger数dex2;
用于(NSNumber*阵列中的编号2)
{
如果([theNumber integerValue]>ymax){
ymax=[整数数值];
numberIndex1=[array2 indexOfObject:theNumber];
}
}
用于(NSNumber*阵列中的编号2)
{
if([theNumber integerValue]
NSLog输出为:

最高数字:129171656,索引:-1073752392(哈??)

最低数字:57,索引:5(正确)


你如何解释这种奇怪的行为?这两个函数看起来相同。一个在工作,一个不在?我已经玩了很多次了,但是我还是不能把我的手指放在上面。任何帮助都将不胜感激/

您可以获得如下代码所示的最大和最小号码。这可能对你有帮助

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);

请初始化NSInteger ymax=0; NSInteger-ymin=0; NSInteger numberIndex1=0; NSInteger numberIndex2=0; 它会解决你的问题。
否则它将使用垃圾值进行检查并给出错误的结果。

如果我没有错的话,您认为NSInteger的默认值是0,不,它不能保证为零,因为它是一个局部自动变量。如果没有初始化,其值是不确定的


因此,您需要为var设置默认值,从ymax=-1开始

更合理的解决方案是:


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];

享受我的答案……快乐编码

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”,零]


你初始化了NSIntegers吗?正如上面代码中提到的那样初始化它。数组中的数字有多大?对不起,我看不出你在哪里给NSIntegers初始值…@JohnWoods数组很小。大约12个元素,最大的是3位数@奇怪的是,它似乎在没有任何初始值的情况下工作。但即使我尝试用数组的第一个元素初始化它,比如
NSInteger ymin=[array2 indexOfObject:0]
我得到了相同的结果。
indexOfObject:
需要一个对象,而不是float/int或任何其他基本数据类型。@RahulPatel因为您在
valueForKeyPath:
中使用了
.intValue
,如果
NSNumber
的实际值超出整数的范围,逻辑将中断。@AmreshKumar您是对的。这就是为什么我一开始没有采用这种方法。我的代码比较长,但对我来说效果更好。@AmreshKumar:你说得对,但提问者没有定义哪些值,这就是为什么我提到代码只是为了表达想法。不适用于复制粘贴这解决了我获取最大值的问题。但是现在min被搞砸了。索引处的最高数字:491:2索引处的最低数字:0:0,但我认为初始化是这样的
NSInteger ymin=[array2 indexOfObject:0]应该可以解决这个问题。@nikhitadkslfslg是的。在max case中,你也可以这样做。你说得对,这就是问题所在。然而在这种情况下,ymax=0;工作正常,但ymin需要使用数组的第一个元素初始化,否则返回null/No不一定,设置ymin=NSIntegerMax;我不知道。也很好,谢谢。备注:对于大型数组,仅为查找最小值和最大值而对其进行排序要比枚举数组或键值编码方法慢,请进行比较。
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);