Java 新手来了。我正在练习数组问题,我遇到了这个问题:给定一个奇数长度的整数数组,查看数组中的第一个、最后一个和中间值并返回最大的值。数组长度至少为 1。
我知道如何在数组中找到第一个、最后一个和中间值。然后我尝试使用 if 语句来解决这个问题。
我的代码:
public int maxTriple(int[] nums) {
if(nums[0]>nums[(nums.length+1)/2-1]&&nums[0]>nums[nums.length-1]){
return nums[0];
}else if(nums[(nums.length+1)/2-1>]>nums[0]&&nums[(nums.length+1)/2-1>]>
nums[nums.length-1]){
return nums[nums.length-1];
}else{
return nums[nums.length-1];
}
}
但是这段代码根本不起作用我该如何修复我的代码?
首先,为了使代码更具可读性/可理解性,您应该将感兴趣的 3 个值分配给局部变量,并且应该在运算符周围添加一些空格。
此外,由于您知道长度将是奇数,length / 2
因此足以找到中间值:
int first = nums[0];
int middle = nums[nums.length / 2];
int last = nums[nums.length - 1];
当你的if
块以一个return
语句结束时,else
它就变得多余了,尽管这是一个风格问题。在这种情况下,它几乎没有什么区别,但在更复杂的代码中,它会对代码复杂性产生很大的影响。
当然,正如PM 77-1 指出的那样,您的主要问题是。
你知道你回来了
nums[nums.length-1]
两次吗?
中间的return
语句返回了错误的值:
if (first > middle && first > last) {
return first;
}
if (middle > first && middle > last) {
return middle;
}
return last;
您可以使用三元条件运算符将其写在单个语句中:
return (first > middle && first > last ? first :
middle > first && middle > last ? middle : last);
您可以使用该Math.max()
方法来简化它:
return Math.max(Math.max(first, middle), last);
或者您可以使用IntStream.max()
,如果您有很多值,这会更好:
return IntStream.of(first, middle, last).max().getAsInt();
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句