【问题标题】:middle number in array with two methods java数组中的中间数,有两种方法java
【发布时间】:2025-12-31 08:05:07
【问题描述】:

如何让我的代码找到中间数字?每当我运行我的代码时,我都可以输入我想要的数字,但它并没有告诉我中间的数字是什么。

 public static int middleArray(int values[])
 {
   //reading numbers into the array
  int [] ma = new int [0];
  int middleArray;
  if(values.length % 2 == 0)
  {
      int num1=(values.length-1)/2;
      int num2 = values.length/2;

      middleArray = ( values[num1] + values[num2])/ 2;
      return middleArray;
    }  
         else
     {
        int num = (values.length - 1) / 2;
        middleArray = values[num];

     }
       return middleArray;
     }
    public static void main() {
   Scanner s = new Scanner(System.in);
   System.out.println("Enter a series of numbers to determine middle 
   number");
   int middleArray = s.nextInt();


  }
 }

【问题讨论】:

  • 请将您的代码包含为文本,而不是屏幕截图
  • 如果您将文本粘贴到问题中而不是屏幕截图中,会更容易为您提供帮助。 :)
  • 扫描器将一次读取一个 int,您应该构建一个数组,将其传递给您的方法以查找中间数。现在在您的主要方法中,您只是在读取每个 int,但没有对它做任何事情。您的结束行应该类似于 int middleNum = middleArray(numArray);其中 numArray 是您使用 Scanner 构建的数组。然后你会打印出我猜的那个数字。

标签: java arrays methods return


【解决方案1】:

查看您的代码,我无法理解它,而且您似乎在计算某些东西时做了一些错误的数学运算

      int num1=(values.length-1)/2;
      int num2 = values.length/2;

      middleArray = ( values[num1] + values[num2])/ 2;

您将数组的长度添加到自身,然后除以 2。基本上取消了两次添加数组长度。除此之外,您甚至从未在主循环中调用过您的函数,也没有办法关闭您的输入。

用于获取一组未排序数字中位数的代码的功能版本将是这样的(我摆脱了扫描仪,因为那种用户输入变得复杂,我认为你还没有达到那个水平):

    public static double takeMiddleOfArr(int values[]) {
        double output = 0; //Initialize output
        if(values.length % 2 != 0) { //See if the array is even or odd
            output = values[(int)Math.floor(values.length/2)]; //If odd just output middle element
        } else {
            double mid = values.length/2.0; //Finds middle element of array
            output = (values[(int)(mid-1)]+values[(int)(mid)])/2; //If even take avg of middle elements
        }
        return output;
    }
    public static void main(String[] args) {
        int[] array = {1,2,3,4,20,6,3,2,1}; //Input array
        System.out.println(takeMiddleOfArr(array)); //Prints outout
    }

【讨论】:

    【解决方案2】:

    原始代码计算中获取中间数字的逻辑是 (values.length-1)/2 而应该是 [(values.length/2)-1]。如果有两个数字,那么这两个数字将被打印为中间数字。请使用示例测试结果尝试以下代码。

    代码:

    public class middleNum {
    
        public static void main(String args[]) throws Exception {
            int[] first= new int[] {1,2};
            int[] second= new int[] {1,2,3};
            int[] third= new int[] {1,2,3,4};
            int[] fourth= new int[] {1,2,3,4,5};
            System.out.println(Arrays.toString(getMiddleNum(first)));
            System.out.println(Arrays.toString(getMiddleNum(second)));
            System.out.println(Arrays.toString(getMiddleNum(third)));
            System.out.println(Arrays.toString(getMiddleNum(fourth)));
            }
    
        public static int[] getMiddleNum(int[] nums) {
            int[] ma;
            if (nums.length %2 == 0) {
                // if the array length is even then there are two middle numbers
                ma = new int[2];
                ma[0] = nums[(nums.length/2) - 1];
                ma[1] = nums[nums.length/2];
    
            } else {
                // if the array length is odd then there is one middle number
                ma = new int[1];
                ma[0] = nums[nums.length/2];
            }
            return ma;
        }
    }
    
    Output:
    
    [1,2]
    [2]
    [2,3]
    [3]
    

    【讨论】: