在Java中查找数组的中间元素

给定一个整数数组,我需要返回一个包含原始数组中间元素的新数组。 具体来说,如果原始数组的长度是奇数,则结果将具有一个元素,如果是偶数,则结果将具有两个元素。

这是我现在的代码,适用于偶数长度的数组。 如何使它适用于奇数长度的数组?

public int[] makeMiddle(int[] nums) { int[] a = new int[2]; if(nums.length>1) { a[1]=nums[nums.length/2]; a[0]=nums[nums.length/2-1]; return a; } else { a[2]=nums[((nums.length+1)/2) -1]; } return a; } 

int mid = firstIndex +(lastIndex-firstIndex)/ 2,将为您提供数组的中间值。

试试这段代码:

 public int[] makeMiddle(int[] nums) { int[] a; if (nums.length %2 == 0) { // even-length array (two middle elements) a = new int[2]; a[0] = nums[(nums.length/2) - 1]; a[1] = nums[nums.length/2]; } else { // odd-length array (only one middle element) a = new int[1]; a[0] = nums[nums.length/2]; } return a; } 

在原始代码中,您没有检查nums的长度是偶数还是奇数。

一般的解决方案:

 public static int[] midArray(int[] arr) { int extra = arr.length % 2 == 0? 1 : 0; int[] a = new int[1 + extra]; int startIndex = arr.length / 2 - extra; int endIndex = arr.length / 2; for (int i = 0; i <= endIndex - startIndex; i++) { a[i] = arr[startIndex + i]; } return a; } 

测试运行:

 public static void main(String[] args) { int[] a = new int[]{1, 2, 3, 4}; int[] b = new int[]{1, 2, 3}; int[] c = new int[]{1, 2}; int[] d = new int[]{1}; System.out.println(Arrays.toString(midArray(a))); System.out.println(Arrays.toString(midArray(b))); System.out.println(Arrays.toString(midArray(c))); System.out.println(Arrays.toString(midArray(d))); } 

输出:

 [2, 3] [2] [1, 2] [1]