1

プログラムで許可されていない情報にアクセスしようとしています。私のメソッド「addTrack」では、myTracklist オブジェクトを認識しません。メイン クラスのメソッドを使用して myTracklist.count を呼び出すにはどうすればよいですか?

public class CD {
    String art;
    String tit;
    public CD(String artist, String title){
        art = artist;
        tit = title;
        tracklist myTracklist = new tracklist(100);
    }

    public static void main(String[] args) {
        String mainArtist;
        String mainTitle;
        CD myCD = new CD("Awesomeguy", "AwesomeCDName");
        mainArtist = myCD.getArtist();
        System.out.println(mainArtist);
        mainTitle = myCD.getTitle();
        System.out.println(mainTitle);
        myCD.display();
    }

    public String getArtist(){
        String person;
        person = art;
        return person;
    }

    public String getTitle(){
        String name;
        name = tit;
        return name;
    }

    public boolean addTrack(String trackinfo){
        boolean result = false;
        if (myTracklist.count < 100){
            myTracklist.add(trackinfo);
            result = true;
        }
        return result;
    }

    public int numTracks(){
        int amount;
        amount = myTracklist.count();
        return amount;
    }

    public void display(){
        System.out.println("Artist = "+ art);
        System.out.println("Title = "+ tit);
        tracklist.display();
    }
}

これが私のトラックリストクラスです

public class tracklist {
    int length;
    int numUsed;
    String[] storage;

    public tracklist(int size){
    length = size;
    numUsed = 0;
    storage = new String[length];
    }

    public int count(){
        return numUsed;
    }
}
4

4 に答える 4

3

CDコンストラクター内でトラックリストを宣言しているため、コンストラクター内にのみ存在し、他の場所には存在しないというスコープの問題があります。クラスのすべてのメソッドで使用できるようにするには、クラスで宣言されているフィールドにする必要があります。

だから代わりに

public class CD {
    String art;
    String tit;
    public CD(String artist, String title){
        art = artist;
        tit = title;
        tracklist myTracklist = new tracklist(100);
    }

行う

public class CD {
    private String art;
    private String tit;
    private tracklist myTracklist; // declared

    public CD(String artist, String title){
        art = artist;
        tit = title;
        myTracklist = new tracklist(100); // initialized
    }

    // getter and setter methods of course.

微妙ですが重要な違いです。

余談ですが、他の人があなたのコードや質問をより簡単に理解できるように、Java の命名規則を学びたいと思うでしょう。クラス名は大文字で始まります。

余談ですが、外部クラスでクラス フィールドを直接操作しないでください。プライベート フィールドとパブリック ゲッターおよびセッターを使用して、表示できる内容と実行できる内容をクラスがより詳細に制御できるようにします。

于 2013-02-26T02:50:16.180 に答える
0

顧客で宣言したため、「myTracklist」変数はコンストラクターでのみ表示されます。したがって、「addTrack」は myTracklist オブジェクトを認識しません。

グローバルに宣言し、

public class CD {
    String art;
    String tit;
    tracklist myTracklist;

そして、以下のようにコンストラクターで初期化します。

myTracklist = new tracklist(100);
于 2013-02-26T02:52:55.673 に答える
0

コンストラクターmyTrackListの外側の宣言を保持します。このような:-

String tit;
tracklist myTracklist;

public CD(String artist, String title){
    art = artist;
    tit = title;
    myTracklist = new tracklist(100);
}
于 2013-02-26T02:51:34.143 に答える
0

ここにあるはずmyTracklist.count()です:

if (myTracklist.count < 100){

また:

String tit; // oh I love this object name!
tracklist myTracklist;
public CD(String artist, String title){
    art = artist;
    tit = title;
    myTracklist = new tracklist(100);
}
于 2013-02-26T02:51:51.380 に答える