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