【问题标题】:main class wont recognize class? [duplicate]主班不认班? [复制]
【发布时间】:2018-10-18 15:49:19
【问题描述】:

我写了这段代码:

public static void main(String[] args) {
    Scanner s = new Scanner(System.in);
    Liber l = new Liber();// and here, the second 'Liber', it's telling me to "create constructor 'Liber()' in tipetnumerike.Liber"

虽然我的其他类的代码是这样的:

package tipetnumerike;

public class Liber {

private int id;
private String Titulli;
private int VitiPublikimit;

public Liber(int i, String T, int VP) {
    id = i;
    VitiPublikimit = VP;
    T = Titulli;
}

public int getId() {
    return id;

}

public String getTitulli() {
    return Titulli;
}

public int getVitiPublikimit() {
    return VitiPublikimit;
}

public void setVitiPublikimit(int VP) {
    VitiPublikimit = VP;
}

public void setTitulli(String T) {
    Titulli = T;
}

public String ToString() {
    return id + ':' + Titulli + '-' + VitiPublikimit;

}

public boolean equals(Object o) {
    if (o instanceof Libri) {

        return id == ((Liber) o).getId();

    }
    return false;
}

}

我不知道我做错了什么,我认为我不应该抛出一个构造函数,我想获得 Liber 类,在我的其他项目中,这没有发生。

【问题讨论】:

  • 因为你的类没有默认构造函数。它只有一个接受 int、String、int
  • 您收到的错误消息的确切文本是什么?你导入包名tipetnumerike了吗?

标签: java netbeans getter-setter


【解决方案1】:

你使用new Liber();,意思是创建一个没有参数的实例,默认情况下这个构造函数存在但是因为你创建了另一个构造函数Liber(int i, String T, int VP)它现在不存在,你必须添加它:

public Liber(){ ... }

还有

  • 遵循 Java 命名约定:包、属性、变量、参数、方法必须以小写开头
  • ToString() -> toString() 否则不会使用

【讨论】:

    【解决方案2】:

    您没有没有任何参数的 Liber 构造函数,但您正试图这样构造它。

    要么传递您所需的int i, String T, int VP(请注意,您可能想查看命名约定),或者如消息所述,在您的 Liber 类中创建一个空的构造函数。后者可能不是您想要的,因为您需要稍后以另一种方式获取您需要的那些值。你也有他们的设置器,但这只会让你的代码无缘无故地变得冗长。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-17
      • 2018-05-20
      相关资源
      最近更新 更多