среднее число в массиве с двумя методами Java - PullRequest
0 голосов
/ 08 февраля 2019

Как мне получить мой код, чтобы найти среднее число?Всякий раз, когда я запускаю свой код, я могу ввести желаемые цифры, но они не говорят мне, что такое среднее число.

 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();


  }
 }

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Логика в исходном расчете кода для получения средних чисел равна (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]
0 голосов
/ 08 февраля 2019

Глядя на ваш код, у меня возникли проблемы с его выполнением, и похоже, что вы ошиблись в математике, вычисляя некоторые вещи

      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
    }
...