【问题标题】:Java: cannot find symbol (constructor)Java:找不到符号(构造函数)
【发布时间】:2012-02-17 01:07:14
【问题描述】:

新手在这里做 Java 作业。我有一个名为 Album 的类,其中包含以下构造函数:

public class Album {

    private String title;
    private String artist;
    private String genre;
    private Song favoriteTrack;
    private int trackNumber;
    private static int numAlbums;

    //Constructors
    public Album(String title, Song favoriteTrack, int trackNumber) {
        this.title = title;
        this.favoriteTrack = favoriteTrack;
        this.trackNumber = trackNumber;
        artist = favoriteTrack.getArtist();
        genre = favoriteTrack.getGenre();
        numAlbums++;
    }

    public Album(String title, Song favoriteTrack) {
        this(title, favoriteTrack, 1);
    }
...}

然后我有第二个类 MusicCollection,它在其 main 方法中三次实例化 Album 类...

public static void main (String[] args) {...

    Album album1 = new Album("Debut", "Venus as a Boy", 3);
    Album album2 = new Album("Homework", "Around the World", 7);
    Album album3 = new Album("Ghost in the Machine", "Invisible Sun", 3);
    ...}

但是,当我尝试编译 MusicCollection.java 时,我得到了错误:

cannot find symbol
symbol : constructor Album(java.lang.String,java.lang.String,int)
location : class Album

每次我尝试调用构造函数。 Album 和 MusicCollection 类在同一个目录中,并且 Album.java 编译。 我想我在做一些愚蠢的事情,但我无法弄清楚。 任何帮助将不胜感激!

【问题讨论】:

  • 寻求家庭作业帮助是可以的,但请记住包含家庭作业标签。
  • 好的,我会记住的。

标签: java constructor compiler-errors


【解决方案1】:

您定义的构造函数的第二个参数是 Song,而不是 String,但在您的 main 中,您尝试使用 String 作为第二个参数来实例化它。

【讨论】:

  • 啊。认为这是一件愚蠢的事情。感谢您的帮助!
【解决方案2】:

当您声明它应该接收Song 的实例时,您将String 传递给Album 构造函数的第二个参数。

【讨论】:

    【解决方案3】:

    宾亚明说了什么!如果你有一个歌曲类,你需要说new Album("Debut", new Song("venus as a boy"), 3);之类的东西,这取决于你的歌曲类是如何工作的,如果没有,将歌曲更改为字符串类型

    【讨论】:

      【解决方案4】:

      您正在尝试使用 2 个字符串而不是一个字符串和某个类 Song 来实例化专辑,也许您应该将构造函数更改为

      public Album(String title, String favoriteTrack, int trackNumber) {
          this.title = title;
          this.favoriteTrack = favoriteTrack;
          this.trackNumber = trackNumber;
          artist = favoriteTrack.getArtist();
          genre = favoriteTrack.getGenre();
          numAlbums++;
      }
      

      或者这样做:

      new Album("Debut", new Song("Venus as a boy"), 3);
      

      或者无论如何创建歌曲。

      【讨论】:

        猜你喜欢
        • 2013-01-16
        • 1970-01-01
        • 1970-01-01
        • 2012-05-23
        • 2010-10-05
        • 1970-01-01
        • 2018-04-13
        • 1970-01-01
        • 2012-12-17
        相关资源
        最近更新 更多