如何将数组的元素从子类传递到主类

时间:2019-07-04 04:33:11

标签: java arrays

所以我对学习Java非常陌生,我有一个子类,它包含主类和父类,该类负责所有计算。我在如何将数组的元素从主类传递到父类时遇到问题。

这是我的代码。请帮助我如何实例化数组。

import java.util.Scanner;

public class GreatestLeastAverageApp {

  public GreatestLeastAverageApp() {
    // TODO Auto-generated constructor stub
  }

  public static void main(String[] args) {

    GreatestLeastAverage number = new GreatestLeastAverage();

    int[] x = {0};
    int a = 0, b = 0;
    x = new int[a]; 
    {
      for (int i = 0; i <= a; i++) 
      {
        for (int j = 0; j <= a; j++)
          GreatestLeastAverage.a[i] = x[j]; // loop to pass  the values of the array elements to the parent class from the sub class. 
      }
    }


    Scanner keyboard = new Scanner(System.in); // for the input from the user 
    System.out.println("Enter the number of elements:");
    a = keyboard.nextInt(); // enter the number of integers to be entered so loop can run accordingly
    System.out.println("Enter a set of integers( Enter -99 to exit):");
    do // do loop so the user can input the variables until one of the variable is =-99. 
    {
      {
        for (b = 0; b <= a; b++)
          x[b] = keyboard.nextInt();
      }
    } while (x[b] != -99);

    //GreatestLeastAverage number = new GreatestLeastAverage(); // object made for parent class. 
    System.out.println("The Greatest Number is" + number.computegreatest()); // output line. 
    System.out.println("The Smallest Number is" + number.computeleast());
    System.out.println("The average is " + number.computeaverage());
    keyboard.close();
  }

}

public class GreatestLeastAverage {

  static int x; //variables declared for input in super class. 
  public static int[] a; // static variable to access in both classes.    
  int temp;
  int temp1;
  int temp2;
  int average;

  public int greatestleastaverage(int d) {
    d = x;
    return x;
  }

  public static int getarray(int[] b) {
    for (int i = 0; i <= x; i++) {
      for (int j = 0; j <= x; j++) {
        a[i] = b[j];
      }
    }
    return b[];
  }

我知道您不能返回数组的元素,但我确实需要帮助。

2 个答案:

答案 0 :(得分:1)

使用列表。它们通常更灵活,如果您正确使用ArrayList,它实际上可以像数组一样具有性能。

public class GreatestLeastAverage {
    // ... other private members
    private List<Integer> a = new ArrayList<Integer>();

    public List<Integer> getA() {
        return a;
    }
}

这使您可以执行以下代码:

GreatestLeastAverage gla = new GreatestLeastAverage();
for (int b = 0; b <= a; b++) {
    gla.getA().add(keyboard.nextInt());
}

如果您需要将该数据用于其他用途,它已经在gla中了!只需重复使用它即可。

for(int a : gla.getA()) {
    // Do something with a
}

我确定您使用了静态成员,因为您不知道如何使静态成员正常工作,只是知道通常不建议使用静态成员,除非它们是最终成员(恒定)。

答案 1 :(得分:0)

您不应通过设置静态字段(GreatestLeastAverage)的值将数据(数组)传递给public static int[] a;类中的方法。相反,您应该将数据作为方法的参数传递给方法。您的程序应如下所示:

import java.util.Scanner;

public class GreatestLeastAverageApp  {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        System.out.println("Enter the number of elements:");
        int numOfElems = input.nextInt();
        int[] numbers = new int[numOfElems];
        System.out.println("Enter a set of integers:");
        for (int i = 0; i < numOfElems; i++) {
            numbers[i] = input.nextInt();
        }

        System.out.println("Statistics:");
        System.out.println("  min: " + GreatestLeastAverage.findMin(numbers));
        System.out.println("  max: " + GreatestLeastAverage.findMax(numbers));
        System.out.println("  average: " + GreatestLeastAverage.findAverage(numbers));
    }
}


class GreatestLeastAverage {

    public static int findMin(int[] numbers) {
        int candidate = numbers[0];
        for (int num : numbers) {
            if (num < candidate) candidate = num;
        }
        return candidate;
    }

    public static int findMax(int[] numbers) {
        int candidate = numbers[0];
        for (int num : numbers) {
            if (num > candidate) candidate = num;
        }
        return candidate;
    }

    public static double findAverage(int[] numbers) {
        int sum = 0;
        for (int num : numbers) {
            sum += num;
        }
        return sum / (double) numbers.length;
    }

}

要使此代码更好,请执行以下操作:

  • 上面的最小/最大/平均值计算不太好,例如如果将空数组传递给findAverage,则numbers.length将是0,并且将除以0。您应该使这些计算更好,请参阅:#1#2#3
  • 当您需要在运行时动态更改列表的大小时,请考虑使用ArrayList而不是数组(请参见Neil's answer)。