我正在进行一项任务,我必须使用for循环在数组中找到最高值,而不进行排序。我觉得我到目前为止已接近正确但不完全正确。下面是我到目前为止的代码示例。
NSArray *unsortedArray = @[ @2, @44, @11, @99, @35 ];
for (int i = 0; i < 4 ; i++) {
id number = [unsortedArray objectAtIndex:i];
id largestNumber = 0;
if (largestNumber < number) {
largestNumber = number;
NSLog(@"%@ is the largest number", largestNumber );
return 0;
}
}
现在这只返回区域中的第一个值然后循环停止,我是否将错误的值分配给maximumNumber和number?代码很新,所以我很感激,反馈和例子。
谢谢!
答案 0 :(得分:17)
键值编码解决方案,无循环
NSArray *unsortedArray = @[ @2, @44, @11, @99, @35 ];
NSNumber *maxNumber = [unsortedArray valueForKeyPath:@"@max.self"];
NSLog(@"%@", maxNumber); // 99
请参阅Mattt Thompson撰写的这篇有趣的文章: class
答案 1 :(得分:0)
我忽略了返回0,因为我不确定你的目的是什么。但是你需要在循环外声明id maximumNumber来跟踪它
NSArray *unsortedArray = @[ @2, @44, @11, @99, @35 ];
NSNumber *largestNumber = @0;
for (int i = 0; i < [unsortedArray count] ; i++) {
NSNumber *number = [unsortedArray objectAtIndex:i];
if ([number isGreaterThan:largestNumber]) {
largestNumber = number;
}
}
NSLog(@"%@ is the largest number", largestNumber );
这将跟踪对maximumNumber数组的更改,然后在迭代完成后记录结果。
还有另一种使用foreach方法的方法
NSLog(@"%@ is the largest number", largestNumber );
NSNumber *largestNumber = @0;
for (NSNumber *number in unsortedarray) {
if ([number isGreaterThan:largestNumber]) {
largestNumber = number;
}
}
NSLog(@"%@ is the largest number", largestNumber );
如果您希望我解释foreach,请发表评论
答案 2 :(得分:0)
KVC答案是最好的,但如果你想用循环来做..
NSArray *unsortedArray = @[ @2, @44, @11, @99, @35 ];
NSNumber *l = [unsortedArray objectAtIndex:0];
for (int i = 1; i < 5; i++) {
l = ([[unsortedArray objectAtIndex:i]integerValue] > [l integerValue] ? [unsortedArray objectAtIndex:i]:l);
}
NSLog(@"Largest = %@\n",l);
另外,如果数组中有五个对象,则循环不变量必须测试i < 5
,不 i < 4
。当你应该在索引4之后停止时,它将在索引3处停止。最后,如果要比较浮点或其他数字类型,则仅比较整数值。您应该记得指定适当的属性。你可以看到所有here。
修改:(Downvotes for what?此答案 正确..)
为了澄清,因为你是新的,if
语句也可以写成如下:
a = (b > c ? (return this if true):(return this if false)
答案 3 :(得分:-1)
你在for循环中有太多内容。
您需要将forNumber的声明放在for循环之外。你也可能错过了}
,因为if语句中的“return 0”会立即退出整个函数,因为它在for循环中会在第一次传递时退出。
id largestNumber = 0;
for (int i = 0; i < 4 ; i++) {
id number = [unsortedArray objectAtIndex:i];
if (largestNumber < number) {
largestNumber = number;
}
}
NSLog(@"%@ is the largest number", largestNumber );
return 0; // Not sure if you even need this