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];
}
}
但是这段代码根本无法解决我如何修复我的代码?
答案 0 :(得分:0)
在第二个 - 如果你有额外的“>” (也许是拼写错误)
如果第二个条件为真,则需要返回nums[(nums.length+1)/2-1
所以你需要以这种方式解决它:
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)/2-1];
}else{
return nums[nums.length-1];
}
}
答案 1 :(得分:0)
由于您只对值感兴趣,而不是索引,因此可以使用
public int maxTriple(int[] nums) {
int max = Math.max(nums[0], nums[nums.length - 1]);
return Math.max(max, nums[nums.length / 2]);
}
答案 2 :(得分:0)
首先,为了使代码更易读/可理解,您应该将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 pointed out。
您是否知道返回
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();
答案 3 :(得分:0)
可读性多于多个条件:
public int maxTriple(int[] nums) {
return Math.max(Math.max(nums[0], nums[nums.length - 1]), nums[nums.length / 2]);
}