Simple Array程序 - 基本JAVA" middleValie

时间:2016-11-04 09:21:11

标签: java arrays

"给定一个整数数组,如果长度为奇数,则返回中间值,如果长度为偶数则返回两个中间值的平均值,如果长度为零,则返回零。

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的网站,无法弄清楚数字是如何输入的,但是想学习如何解决这个问题。

感谢。

这是问题的链接 http://codingbat.com/prob/p226577

2 个答案:

答案 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];

  }
}