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 构造函数中声明了 tracklist,因此它只存在于构造函数内部,而没有其他地方存在。您必须使其成为在类中声明的字段,才能在类的所有方法中使用。

所以而不是

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 命名约定,以便其他人可以更容易地理解您的代码和您的问题。类名以大写字母开头。

顺便说一句:不要让外部类直接操作类字段。使用私有字段和公共 getter 和 setter,让类可以更好地控制可以看到的内容和可以执行的操作。

于 2013-02-26T02:50:16.180 回答
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 回答
0

由于您已在客户中声明它,因此“myTracklist”变量将仅在您的构造函数中可见。因此“addTrack”无法识别 myTracklist 对象。

在全球范围内声明,

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

并在构造函数中初始化如下。

myTracklist = new tracklist(100);
于 2013-02-26T02:52:55.673 回答