簡體   English   中英

如何將數組的元素從子類傳遞到主類

[英]How to pass elements of an array from sub class to main class

所以我對學習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[];
  }

我知道你不能返回數組的元素,但我真的需要幫助。

使用列表。 它們通常更靈活,如果您正確使用 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
}

我確定您使用了靜態成員,因為您不知道如何使其工作,但只知道通常不鼓勵使用靜態成員,除非它們是最終的(常量)。

您不應該通過設置靜態字段的值( public static int[] a; )將數據(數組)傳遞給GreatestLeastAverage類中的方法。 相反,您應該將數據作為方法的參數傳遞給方法。 你的程序應該是這樣的:

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 的回答)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM