在主程序中调用方法

时间:2013-02-26 02:49:10

标签: java methods

我正在尝试访问我的程序不允许的一些信息。  在我的方法“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 个答案:

答案 0 :(得分: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);
    }

DO

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可以让类更好地控制可以看到的内容和可以执行的操作。

答案 1 :(得分:0)

myTrackList的声明保留在构造函数之外。像这样: -

String tit;
tracklist myTracklist;

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

答案 2 :(得分: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);
}

答案 3 :(得分:0)

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

全局声明,

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

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

myTracklist = new tracklist(100);