2016-04-04 77 views
0

我必須傳遞構造函數Guitar中的值,然後將它們傳遞給generateSong方法。有一個捕獲。生成的歌曲方法不能帶參數,因爲由於這些值在同一個類中,它們應該能夠從構造函數中獲取值。將構造函數的值傳遞給方法

當我嘗試實現該方法中的值時,無法訪問這些值。我怎樣才能解決這個問題?

public Guitar(int chord, int numOfStrings) { 
     //pass these values to the generateSong method 
     System.out.println("Guitar() generated a guitar with: " + numOfStrings + "." + "Song length is " +chord); 
     // declare the array for which the song is stored 
     // store the values of the last row i (highest index of the array) 
     double[] max = null; 
     Guitar.generateSong(); 
     // start the generate song method 
     public static void generateSong() { 
      double [] [] song = new double [numOfStrings] [chord]; 
      double[] max; 
      int findmax =0; 
      int sum =0; 
      for (int i =0; i<song.length; i++) { 
       for (int j =0; j<song.length; j++) { 
        sum = (int) (sum +song[i][j]); 
       } 
       for (int e=0; e<song.length; e++) { 
        if (song[e]!=song[findmax]) { 
         max[e] =e; 
        } 
        for(int k=0; k<song.length; k++) { 
         for (int l=0; k<song[k].length; k++) 
          // assign note values to the array 
          song [k] [l] = 27.5 + (Math.random()* 4186); 
         // print out the proper value 
         System.out.printf("8.2%f", song); 
         for(int m=0; m<max.length; m++) 
          max[m]= 1 +(Math.random() *3); 
         System.out.printf("8.2%f", max); 
        } 
       } 
      } 
     } 

int chordint numOfStrings在主方法來自命令行參數,並通過下面的對象被傳遞給該方法:

Guitar guitar = new Guitar (numOfStrings, chord); 

回答

2

所以,有兩個語法錯誤和之一誤解要求。讓我們從誤解開始。

生成歌曲方法不能接受參數,因爲由於值在同一個類中,所以它們應該能夠從構造函數中獲取值。

這隻能通過字段完成。您需要設置您的構造函數,以便創建這些值的字段,然後可以在此類中的任何其他位置使用這些字段。

在這種情況下...

public class Guitar { 
    private int chord; 
    private int numberOfStrings; 

    public Guitar(final int chord, final int numberOfStrings) { 
     this.chord = chord; 
     this.numberOfStrings = numberOfStrings; 
    } 
} 

其次,你不能等方法內部定義方法。將generateSong方法的定義移出構造函數。

三,不要使generateSong方法靜態!您可以創建要使用的這些實例,並使用main內的該實例執行所需的行爲。

// in main() 
Guitar guitar = new Guitar(4, 10); 
guitar.generateSong(); 

作爲附錄,你需要確保你解析你在命令行中得到的整數,因爲這些值總是會被​​進來的String。我將這作爲練習給讀者。

+0

'第二,你不能在其他方法裏面定義方法。「不同意。您可以。匿名,lambda也是函數。 – dosdebug

+1

@ssc:lambda是一個函數(或者更好,但是對匿名類很薄)。這不是一種方法。 – Makoto

+0

我的不好。我經常交替使用這些術語,但我理解並明白你的觀點。謝謝。 – dosdebug

相關問題