"给定一个整数数组,如果长度为奇数,则返回中间值,如果长度为偶数则返回两个中间值的平均值,如果长度为零,则返回零。
middleValue([9, 8, 6, 9, 9]) → 6.0
middleValue([2, 5, 2, 4, 3, 5, 2]) → 4.0
middleValue([1, 6, 5, 4, 7, 2]) → 4.0 "
无法确定如何调用数组的长度,检查它是奇数还是偶数,然后继续执行奇数方法,"返回中间值"或者甚至,"找到中间两个数字的平均值并返回。"
想知道我可以使用的数组方法&如果有一个参数,for循环的参数将如何。
到目前为止,我有,
double middleValue(int[] a) {
return a.length;
}
哪个
Expected Run
middleValue([9, 8, 6, 9, 9]) → 6.0 5.0 X
middleValue([2, 5, 2, 4, 3, 5, 2]) → 4.0 7.0 X
middleValue([1, 6, 5, 4, 7, 2]) → 4.0 6.0 X
middleValue([6]) → 6.0 1.0 X
middleValue([]) → 0.0 0.0 OK
middleValue([0, -2, -4]) → -2.0 3.0 X
middleValue([8, 10]) → 9.0 2.0 X
middleValue([4, 5, 5]) → 5.0 3.0 X
other tests
X
到目前为止,通过了具有0
的数组的测试这是来自一个名为codingbat的网站,无法弄清楚数字是如何输入的,但是想学习如何解决这个问题。
感谢。
答案 0 :(得分:2)
的中间值
middleValue([1, 6, 5, 4, 7, 2]) → 4.0 "
基于(5 + 4)/ 2给出4.所以结果也是 int ,并且执行整数除法。
要从数组int[] a
获取值,请使用a[i]
,如下所示:
for (int i = 0; i < a.length; ++i) {
System.out.println(a[i]);
}
要检查某些内容是否为偶数,可以使用模运算符%
,它通过除法(42 % 9 == 6
)或(x/y)*y + (x%y) == x
提供余数。
if (a.length == 0) {
return 0;
}
// floor value of middle:
int middleIndex = a.length / 2; // 6 → 3, 7 → 3
if (a.length % 2 == 0) {
// even
...
} else {
// odd
return a[middleIndex];
}
糟糕的风格一线: (用于学习)
int middleValue(int[] a) {
return a.length == 0 ? 0 : (a[a.length/2] + a[(a.length + 1)/2])/2;
}
答案 1 :(得分:1)
这是一个注释示例,应该描述不同的步骤:
double middleValue(int[] a) {
// get the length of the array
int arrayLength = a.length;
// shortcut : if length is 0, retun immediately
if(arrayLength == 0)
return 0;
// find the middle index :
// length/2 will be rounded down to the smallest integer, giving you the middle index (array indexes start at 0)
int middleIndex= arrayLength/2;
// Length is even (the length is dividable by 2)
if(arrayLength % 2 == 0){
// return the average of the middle values
return (a[middleIndex-1] + a[middleIndex])/2;
}// Length is odd
else{
//return the value of the middle index
return a[middleIndex];
}
}