Вызов метода getAverage в другом классе в массиве - PullRequest
1 голос
/ 29 апреля 2019

У меня есть класс с некоторыми методами, ArrayMin, ArrayMax, ArrayAvg и конструктор, который генерирует массив из 10 значений с числами от 0 до 100.

Я не застрял на самом деле, используя три метода, упомянутых выше. Как мне вызвать методы и получить среднее, минимальное и максимальное значения? Я думал, что смогу просто сделать a1.ArrayMax() после создания Array a1 = new Array(10) в моей MAIN, но не повезло.

import java.util.Random;

public class Array {

    public int size, avg;

    public int ArraySize() {
        return size;
    }

    public int ArrayMin(int a[]) {
        int min = a[0];
        for (int i=0; i<a.length;i++) {
            if (a[i] < min) {
                min = a[i];
            }
        }

        return min;
    }
    public int ArrayMax(int a[]) {

        int max = a[0];
        for (int i=0; i<a.length;i++) {
            if (a[i] > max) {
                max = a[i];
            }
        }

        return max;
    }

    public int ArrayAvg(int a[]) {

      int sum = 0; 
      for (int i = 0; i < a.length; i++) {
          sum += a[i]; 
      }
      avg = sum / a.length; 
      return avg;
    }

    public Array(int size) {

        Random rand = new Random();
        int min = 0, max = 100;
        int[] a = new int[size];
        for (int i=0; i<a.length; i++) {
            int result = rand.nextInt(max-min) + min;
            a[i] = result;
            System.out.println(a[i]);

        }   
    }
}

Ответы [ 2 ]

2 голосов
/ 29 апреля 2019

Я бы немного изменил рефакторинг:

class Array {

    public static int arrayMin(int a[]) {
        int min = a[0];
        for (int i = 0; i < a.length; i++) {
            if (a[i] < min) {
                min = a[i];
            }
        }

        return min;
    }

    public static int arrayMax(int a[]) {

        int max = a[0];
        for (int i = 0; i < a.length; i++) {
            if (a[i] > max) {
                max = a[i];
            }
        }

        return max;
    }

    public static int arrayAvg(int a[]) {

        int sum = 0;
        for (int i = 0; i < a.length; i++) {
            sum += a[i];
        }
        return sum / a.length;
    }
}

и:

public static void main(String[] args) throws InterruptedException {

        Random rand = new Random();
        int size = 10;
        int min = 0, max = 100;
        int[] a = new int[size];
        for (int i = 0; i < a.length; i++) {
            int result = rand.nextInt(max - min) + min;
            a[i] = result;
        }

        System.out.println("Array: " + Arrays.toString(a));
        System.out.println("Max: " + Array.arrayMax(a));
        System.out.println("Min: " + Array.arrayMin(a));
        System.out.println("Avg: " + Array.arrayAvg(a));
    }

вывод:

Array: [96, 56, 21, 59, 85, 31, 84, 83, 23, 80]
Max: 96
Min: 21
Avg: 61
2 голосов
/ 29 апреля 2019

Вам не хватает многих фундаментальных принципов ООП, но для конкретного решения вашей проблемы массив int, который вы создаете в конструкторе, - это не тот массив, который используется в ваших методах.

Чтобы решить эту проблему, в вашем классе Array вам нужна переменная экземпляра для хранения этого массива:

private int[] a;

Теперь, когда у вас есть эта переменная, в вашем конструкторе вместо

int[] a = ...

вы просто делаете

a = ...

Чтобы эта переменная экземпляра содержала 10 случайных чисел. Теперь вы можете удалить параметр в каждом из ваших методов, чтобы все работало плавно.

...