2017-03-12 53 views
0

我需要練習我的語法。我有一系列數字,用這些數字來查找平均值,報告最高數字,並報告最低數字。要報告最高/最低數字,我將對數組進行排序。 但首先我的問題是報告平均值。我認爲,如果我能理解那部分,那麼最小/最大值就沒有問題。我試圖改變它來說Driver.randomArray []。getAverage()以及。使用驅動程序在數組中顯示平均整數

有什麼建議嗎?提前致謝。 〜水晶

錯誤代碼:

Exception in thread "main" java.lang.Error: Unresolved compilation problems: randomArray cannot be resolved to a type Class cannot be resolved to a type Syntax error, insert ". class" to complete Expression

at IntegerArray.main(IntegerArray.java:48)

,它指的是我試圖調用來自該行的平均水平,

System.out.println(randomArray[].getAverage());

首先,驅動程序類

import java.util.Arrays; 

    public class Driver { 


    private static final int MAX = 0; 

    public Driver(){ 
     int[] randomArray = new int [MAX]; 
     int sum; 
     final int MAX; 
    } 

    public int getAverage(){ 
     for (int index = 0; index < MAX; index++){ 
      int sum = 0; 
      int[] randomArray = null; 
      int average; 
      sum = sum + randomArray[index]; 
      average = sum/MAX; 
      return average;} 

     } 

    public void sortArray(){ 
     // sort the array from smallest to biggest 
      int[] randomArray; 
     Arrays.sort(randomArray); 

      System.out.println("The sorted array from smallest to biggest is:"); 
      for (int number : randomArray) { 
      System.out.println(+ number)} 
    } 
    public int getMin(){ 
       int[] randomArray; 
       // find the lowest number 
       return randomArray[0]; 

      } 
    public int getMax(){ 
       int[] randomArray; 
       // find the highest number 
       return randomArray[MAX]; 

      } 


    } 

然後我的主類:


import java.util.Random; 
    import java.lang.reflect.Array; 
    import java.util.Arrays; 


    public class IntegerArray { 



    public static void main (String[] args) { 
      // set up the constant for the size of the array 
      final int MAX = 10; 
      int sum = 0; 
      int average = 0; 

      int[] randomArray = new int [MAX]; 

      for (int index = 0; index < MAX; index++) 

       // values of the array go from 0-10 
       randomArray[index] = (int) (Math.random() *10); 

      // prints the array 
      for (int value : randomArray) 
       System.out.println (value); 


    System.out.println("The length of the array is: " + randomArray.length); 


    System.out.println(randomArray[].getAverage()); 









     } 

    } 

回答

1
  1. 你創建你的方法如的方式。 getAverage()你不能在你創建的數組上調用它。另一方面,你可以在你創建的Driver對象上調用它們。例如:Driver driver = new Driver(); System.out.println(driver.getAverage());如果你想在Array對象上調用它們,你應該將它們添加到Array類(但這是比這更高級的Java)。

  2. 在Java代碼中,您需要添加一個;在聲明之後不要忘記他們;)。你的IDE應該警告你。

  3. 當您創建您的getMax()方法時,您應該添加該數組作爲參數。因此,該方法知道什麼Array對象應該得到最高的數字。例如:

    public int getMax(int [] randomArray){ //找到最大號碼 return randomArray [MAX]; }

此計算您的所有方法。

我希望這可以解決你的一些答案,如果不是請添加評論或其他東西。

所以這裏後,你的代碼:

Driver類:

import java.util.Arrays; 

public class Driver { 


    private static final int MAX = 0; 

    public Driver() { 
     int[] randomArray = new int[MAX]; 
     int sum; 
     final int MAX; 
    } 

    public int getAverage() { 
     int average = 0; 
     for (int index = 0; index < MAX; index++) { 
      int sum = 0; 
      int[] randomArray = null; 
      sum = sum + randomArray[index]; 
      average = sum/MAX; 
     } 
     return average; 
    } 

    public void sortArray(int[] randomArray) { 
     // sort the array from smallest to biggest 
     Arrays.sort(randomArray); 

     System.out.println("The sorted array from smallest to biggest is:"); 
     for (int number : randomArray) { 
      System.out.println(+number); 
     } 
    } 

    public int getMin(int[] randomArray) { 
     // find the lowest number 
     return randomArray[0]; 

    } 

    public int getMax(int[] randomArray) { 
     // find the highest number 
     return randomArray[MAX]; 

    } 
} 

IntegerArray類:

public class IntegerArray { 
    public static void main(String[] args) { 
     // set up the constant for the size of the array 
     final int MAX = 10; 
     int sum = 0; 
     int average = 0; 

     int[] randomArray = new int[MAX]; 

     for (int index = 0; index < MAX; index++) 

      // values of the array go from 0-10 
      randomArray[index] = (int) (Math.random() * 10); 

     // prints the array 
     for (int value : randomArray) 
      System.out.println(value); 


     System.out.println("The length of the array is: " + randomArray.length); 

     Driver driver = new Driver(); 
     System.out.println(driver.getAverage()); 
    } 
} 

回覆問題的意見:

你笑ULD給randomArray作爲參數與getAverage方法,這樣的方法知道哪個陣列應該進行操作,例如:driver.getAverage(randomArray);

你getAverage方法也有一些缺陷: 1.您的總和變量應該是循環,因爲其他外每次在循環中迭代時,您都會將您的總和設置爲0。 2. int[] randomArray = null;你真的不應該做這行的一切,這條線將創建一個新的int數組而你,你應該用你給作爲參數的int數組其值設置爲null。

所以你getAverage方法變爲:

public int getAverage(int[] randomArray) { 
     int sum = 0; 
     for (int index = 0; index < randomArray.length; index++) { 
      sum = sum + randomArray[index]; 
     } 
     int average = sum/randomArray.length; 
     return average; 
    } 
+0

我確實得到了一個平均值的結果,但它是0.當我試圖改變 public int getAverage(){ int average = 0; int int = null;或詮釋平均; 它不會讓我運行代碼,除非它是零。所以我在想,返回值只是返回,而不是循環中的內容。你有什麼建議? – zerocrys

+0

@zerocrys我已經更新了我對你問題的回答。 –

+0

謝謝,我想我現在可能可以弄清楚MAX/MIN部分。感謝你的幫助!我只是一個初學者。 – zerocrys

0

目前主類不引用驅動程序可言,所以你的代碼不能被調用。

System.out.println(randomArray[].getAverage()); 

在這一行randomArray仍然只是一個整數數組(int[] randomArray = ...)。

您將需要創建驅動程序的實例,傳遞你想使用的任何數組,然後做對即.getAverage()

0

randomArray爲null,並且你想從一個空數組閱讀。 您需要定義randomArray作爲一個類的成員,而不是所有功能的局部變量。內部功能 局部變量不能儘快函數結束使用,在其他功能上使用相同的名稱不能幫助這一點。 另外: 循環之前定義總和與平均值。循環後計算並返回平均值。

0

除此之外,您的主要問題似乎是scope rules的根本性誤解。例如:

void method() { 
    int someVariable; 
} 

void method2() { 
    someVariable = 2; // <-- Error. 
} 

在該代碼someVariable是本地的method,而不是它的使用之外。您無法在method2中訪問它。

我建議你讀不僅是上述範圍的規則鏈接,但member variables官方教程的爲好,這也說明範圍。那裏的信息將幫助您制定最終戰略。

在特定情況下你的兩個最合理的選擇是:

  1. 你可以讓你的randomArray類的成員字段(參閱下面的鏈接)。
  2. 您可以將randomArray作爲參數傳遞給您的各種方法(例如,作爲getAverage的參數,另請參閱官方教程passing information to a method)。

您還有其他一些問題,其他一些問題在這裏提到,但我認爲這是您的主要困惑。仔細閱讀官方教程(上面的docs.oracle.com鏈接),它們簡潔明瞭,並且會填補您缺少的一些概念的空白。在你這樣做之後,再來一次。


順便說一句,因爲你的編譯器錯誤的:

System.out.println(randomArray[].getAverage()); 

不幸的是randomArray[].getAverage()根本就沒有足夠的理智來證明編譯器是如何解釋它的完整說明,所以它足以說:不,那是錯誤的。 :)

你要簽出「傳遞信息的方法」教程上面提到的,因爲它看起來像你想表達的東西是這樣的(上面的選項2):

int getAverage (int randomArray[]) { 
    ... 
} 

System.out.println(getAverage(randomArray)); 

另外:請注意,一串整數的平均值本身不一定是整數(1和2的平均值是1.5)。您可能會考慮計算並返回floatdouble