【发布时间】:2014-03-28 00:49:30
【问题描述】:
我确定这很愚蠢,但我一生都无法弄清楚......在主要方法中,当我尝试创建新艺术家时,我一直在创建错误一个新的“录音”线(即:表面和流行)。它说它需要 String, String[] 但正在获取 String, MusicCollection.Artist。它说“实际参数 MusicCollection.Artist 不能通过方法调用转换转换为 String[]。
public class MusicCollection {
private Artist[] artists = new Artist[100];
private Recording[] recordings = new Recording[200];
private int artistCount = 0;
private int recordingCount = 0;
//toString method for MusicCollection
public String toString() {
StringBuffer sb = new StringBuffer();
if (recordingCount > 0) {
sb.append(recordings[0].toString());
for (int i = 1; i < recordingCount; i++) {
sb.append("\n" + recordings[i]);
}
}
return sb.toString();
}
public class Artist {
private String name;
/**
* Construct an artist object and add it to the collection.
*
* @param name the name of the Artist
*/
public Artist(String name) {
this.name = name;
artists[artistCount++] = this;
}
/**
* Retrieve the artist as a string
*
* @return the string representation of the artist
*/
public String toString() {
return name;
}
}
public class Recording {
private String name;
private Artist[] artists = new Artist[100];
private Track[] tracks = new Track[200];
private int trackCount = 0;
public class Track {
private String name;
/**
* Construct track object and add it to the collection.
*
* @param name the name of the track
*/
public Track(String name) {
this.name = name;
tracks[trackCount++] = this;
}
/**
* Retrieve the track as a string
*
* @return the string representation of the track
*/
public String toString() {
return name;
}
}
public Recording(String name, String Artist[]) {
this.name = name;
this.artists = artists;
recordings[recordingCount++] = this;
}
public String toString() {
StringBuffer sb = new StringBuffer(name);
sb.append(" by " + artists + ": ");
if (trackCount > 0) {
sb.append(tracks[0].toString());
for (int i = 1; i < trackCount; i++) {
sb.append(", " + tracks[i]);
}
}
return sb.toString();
}
}
public static void main(String[] args) {
MusicCollection mc = new MusicCollection();
Artist sarahM = mc.new Artist("Sarah McLachlan");
Recording surfacing = mc.new Recording("Surfacing", sarahM);
Recording.Track surfacing1 = surfacing.new Track("Building a Mystery");
Recording.Track surfacing4 = surfacing.new Track("Adia");
Artist u2 = mc.new Artist("U2");
Recording pop = mc.new Recording("Pop", u2);
Recording.Track pop1 = pop.new Track("Discotheque");
Recording.Track pop5 = pop.new Track("Miami");
System.out.println(mc);
}
}
【问题讨论】:
-
public Recording(String name, String Artist[]) {你想要Strings 的数组还是Artists 的数组? -
因此将变量声明为
Artist类型。目前它被声明为类型String,名称为Artist。 -
public Recording(String name, Artist someArtist[]) {}之类的东西应该可以工作。 -
实际上,这一行:
Recording surfacing = mc.new Recording("Surfacing", sarahM);有点告诉我你希望你的构造函数是这样的:public Recording(String name, Artist someArtist) {}因为你传递的是一个Artist对象而不是它的数组. -
在打印输出中获取意外的十六进制值通常意味着您忘记在类上实现 .toString() 并且正在获取默认的 Object.toString() 实现。
标签: java