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 回答
首先,为了使代码更易读/可理解,您应该将3个感兴趣的值分配给局部变量,并且应该在运算符周围添加一些空格 .
此外,由于您知道长度将是奇数,
length / 2
足以找到中间值:当
if
块以return
语句结束时,else
变得多余,尽管这是一种风格问题 . 在这种情况下,它没什么区别,但在更复杂的代码中,它可以对代码复杂性产生很大的影响 .当然,你的主要问题,如PM 77-1 pointed out .
中间
return
语句返回错误的值:您可以使用三元条件运算符在单个语句中编写它:
您可以使用Math.max()方法来简化它:
或者你可以使用IntStream.max(),如果你有很多值,那就更好了:
在第二个 - 如果你有额外的“>”(也许是拼写错误)
如果第二个条件为真,你需要返回
nums[(nums.length+1)/2-1
所以你需要以这种方式解决它:
由于您只对值感兴趣,而不是索引,因此您可以使用