2013-12-10 50 views
-2

我不明白爲什麼我不能做到這一點,沒有得到一個錯誤,說「歌曲不能解決或不是一個領域」。我是一個小白菜,試圖學習這些東西:)預先感謝您的時間,並請告訴我,如果您需要更多的信息。爲什麼不能在這種情況下說variable.array?

import java.util.ArrayList; 

public class Band { 

public String bandName; 
public ArrayList<String> musician = new ArrayList<String>(); 
public ArrayList<String> songs = new ArrayList<String>(); 

// Constructor 
public Band(String bandName) { 
    this.bandName = bandName; 
} 

public void getBandSongs(String bandName){ 
    for (String s : bandName.songs) {    <<<<<<<<<<<ERROR HERE 
     String rating = s.substring(0,1); 
     s = s.substring(1); 
     System.out.println("Rating: " + rating + " - Song name: " + s); 
    } 
} 

} 
+1

我建議你通過[基礎教程](http://docs.oracle.com/javase/tutorial/)。 – Maroun

+0

請使用代碼格式設置代碼,輸入/輸出和結構化文檔,如HTML或XML。爲此,請選擇樣本並單擊郵件發佈/編輯表單上方的「{}」按鈕。 –

+2

'bandName'是一個'String'變量。 'String'變量沒有'歌曲'成員。 –

回答

0

有時錯誤,IDE給你誤導,但是這一次是相當清楚的。 那麼,讓我們來分析一下:

「詩經不能得到解決或不是場」

所以應該打電話報警。你應該做的第一件事是看類型這是你的可變bandName。

public void getBandSongs(String bandName){ 
     for (String s : bandName.songs) ... 

這是一個字符串!當然,你將無法訪問String類型的字段「歌曲」。

也許在你的方法簽名你的意思是有以下幾點:

public void getBandSongs(Band band) 

在這種情況下,你應該能夠訪問band.songs就好了。

或者你可能意味着以下幾點:

for (String s : this.songs) 

這意味着你將訪問類樂隊的對象實例化的「歌曲」變量。

總結:

您在類中定義的屬性:

public String bandName; 
public ArrayList<String> musician = new ArrayList<String>(); 
public ArrayList<String> songs = new ArrayList<String>(); 

可以通過一個變量的類型是該類的訪問(在這種情況下是頻帶)。

希望這已經說明了一點。你是否特別關注任何書?我推薦O'Reilly系列。祝你好運!

ps:我不想添加太多,因爲你開始。但我建議你閱讀「封裝」。這意味着,除非有必要,否則默認情況下,您應該讓您的課程參數專用,並讓其他課程通過「獲得者」和「設置者」訪問它們。這樣的:

public class Band { 

private String bandName; 
private ArrayList<String> musician = new ArrayList<String>(); 
private ArrayList<String> songs = new ArrayList<String>(); 

public String getBandName(){ 
    return this.bandName; 
} 

public void setBandName(String bandName){ 
    this.bandName = bandName; 
} 

//And like that for the other two attributes. That way the classes that need access 
// to these will either use a "get" method or a "set" method without directly 
// accessing the attributes. 

} 

創建getter和setter的工作是如此多餘,無論EclipseNetbeans IDE中有一個功能,可以讓你自動做這些。

+0

謝謝。它對理解有很大的幫助。我剛剛開始了一門入門性的編程課程,並且正在學習Big Java早期對象。感謝您的幫助:) – vanark

0

songsBand的一部分,而不是bandName。 (或僅僅是songs)。

應該指出,雖然公共領域是反封裝(並因此OOP)。這真的是你想要的嗎?

封裝的主要好處(爲實例成員提供getter & setter)是一種統一訪問類中字段的方法。這使您可以爲數據添加驗證邏輯。

private List<String> songs = new ArrayList<>(); 

public List<String> getSongs(){ 
    return songs; 
} 

public List<String> setSongs(List<String> songlist) { 
    this.songs = songlist; 
} 

現在您可以爲這些方法添加驗證。例如,如果你想確保你只能設定的SongList如果它有它至少5首歌曲:

public List<String> setSongs(List<String> songlist) { 
    if(songlist.size() > 5) { 
     this.songs = songlist; 
    } 
} 
+0

你是什麼意思公共領域是再次封裝?我應該使用私人嗎?如果我這樣做,我的程序不起作用。這是我必須爲明天作出的一項任務,所以我已經提供了快速幫助。謝謝。 – vanark

+0

是的,你應該讓它們保密。然後你可以通過設置/獲取字段的方法訪問它們。我將用一個快速示例編輯我的帖子。 –

相關問題