2013-02-26 2 views
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; 
    } 
} 
+2

до сих пор не может получить более 'Струнный синицы,'^_^ –

ответ

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, чтобы другие могли более легко понять ваш код и ваши вопросы. Имена классов начинаются с буквы верхнего регистра.

В качестве второго в стороне: не имеют внешних классов, которые непосредственно манипулируют полями классов. Используйте частные поля и публичные геттеры и сеттеры, чтобы позволить классу иметь больше контроля над тем, что можно увидеть и что можно сделать.

+0

Моя задача требует, чтобы конструктор CD инициализирует объект Треклист. для меня это не имеет смысла, я бы сделал это по-другому, потому что профессор хочет, чтобы это было сделано так. – user1801067

+0

@ user1801067: существует * большая * разница между тем, где объект * инициализирован * и где переменная * объявлена ​​*. Это довольно легко и возможно объявить поле в классе и * initialize * его в конструкторе. Ответ обновлен. –

+0

Спасибо. Взял семестр с java, поэтому я немного ржавый, ха-ха – user1801067

0

Сохраните декларацию myTrackList за пределами конструктор. Как это: -

String tit; 
tracklist myTracklist; 

public CD(String artist, String title){ 
    art = artist; 
    tit = title; 
    myTracklist = new tracklist(100); 
} 
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); 
} 
0

Так как вы объявили его в заказчика "myTracklist" переменная будет видна только в вашем конструкторе. Следовательно, «addTrack» не распознает объект myTracklist.

Объявить глобально,

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

и инициализировать в конструкторе, как показано ниже.

myTracklist = new tracklist(100); 
Смежные вопросы