【问题标题】:Calling a getAverage method within another class, on an array在另一个类中,在数组上调用 getAverage 方法
【发布时间】:2019-09-18 10:50:42
【问题描述】:

我有一个类,它有一些方法,ArrayMin、ArrayMax、ArrayAvg,以及一个构造函数,它生成一个包含 10 个值的数组,其中数字在 0-100 之间。

我并没有坚持实际使用上述三种方法。如何调用这些方法并获得平均值、最小值和最大值?我以为我可以在我的 MAIN 中创建Array a1 = new Array(10)之后做a1.ArrayMax(),但没有运气。

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

        }   
    }
}

【问题讨论】:

  • 也分享主要内容 :) 请正确命名您的方法(骆驼大小写表示法),这样阅读它们要困难得多:)

标签: java arrays class methods


【解决方案1】:

我会重构一下:

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】:

    您缺少 OOP 的许多基本原则,但为了专门解决您的问题,您在构造函数中创建的 int 数组与方法中使用的数组不同。

    为了解决这个问题,在你的 Array 类中,你需要一个实例变量来保存这个数组:

    private int[] a;

    现在你有了这个变量,在你的构造函数中而不是做

    int[] a = ...

    你只是这样做

    a = ...

    使该实例变量成为包含 10 个随机数的变量。您现在可以删除每个方法中的参数以使事情顺利进行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-22
      • 1970-01-01
      • 2016-06-27
      • 2023-04-09
      相关资源
      最近更新 更多