这是我的代码
class TestResepter {
public static void main(String[] args) {
Legemiddel legemiddel = new Legemiddel("Ibuton", 200, 30.5);
Lege lege = new Lege("Petter");
Militærresepter militærresepter = new Militærresepter();
Presepter presepter = new Presepter();
BlaaResepter blaaresepter = new BlaaResepter();
Resept resept=new Resept(legemiddel, lege, 650, 21);
}
}
Legemiddel
,Lege
,Militærresepter
,Presepter
,BlaaResepter
和Resept
是其他classes
。但是,我收到了这个错误:
testresepter.java:3: error: constructor Legemiddel in class Legemiddel cannot be applied to given types;
Legemiddel legemiddel=new Legemiddel("Ibuton", 200, 30.5);
^
required: no arguments
found: String,int,double
reason: actual and formal argument lists differ in length
testresepter.java:4: error: constructor Lege in class Lege cannot be applied to given types;
Lege lege=new Lege("Petter");
^
required: no arguments
found: String
reason: actual and formal argument lists differ in length
testresepter.java:8: error: constructor Resept in class Resept cannot be applied to given types;
Resept resept=new Resept(legemiddel, lege, 650, 21);
^
required: no arguments
found: Legemiddel,Lege,int,int
reason: actual and formal argument lists differ in length
3 errors
为什么?我需要做些什么来使其发挥作用?
这是Legemiddel班级
class Legemiddel {
static int Id=-1;
static String navnet;
static double prisen;
static double virkestoffet;
public static void main(String navn, double pris, double virkestoff) {
Id++;
navnet = navn;
prisen = pris;
virkestoffet=virkestoff;
}
}
答案 0 :(得分:2)
截至目前,您的班级Legemiddel
没有一个带3个参数的构造函数。我认为您会混淆如何创建constructor以及如何编写main
方法。
您正在调用new Legemiddel("Ibuton", 200, 30.5);
,因此您的类应该有一个如下所示的构造函数:
public Legemiddel(String navn, double pris, double virkestoff) {
...
}
此外,另一个潜在的错误来源是,您可能希望使用实例变量而不是所有static
类变量。否则,当您创建Legemiddel
的多个实例时,它将更改所有先前创建的实例的所有值。
例如:
Legemiddel l1 = new Legemiddel("Test", 10, 20);
Legemiddel l2 = new Legemiddel("Oops", 0, 0);
System.out.println(l1.Id); // Would print 1 instead of 0
System.out.println(l1.navnet); // Would print Oops instead of Test
System.out.println(l1.prisen); // Would print 0.0 instead of 10.0
System.out.println(l1.virkestoffet); // Would print 0.0 instead of 20.0
所以你的课应该看起来像
class Legemiddel {
private static int ID_GEN = -1;
private final int id;
private final String navnet;
private final double prisen;
private final double virkestoffet;
public Legemiddel(String navn, double pris, double virkestoff) {
id = ++ID_GEN;
navnet = navn;
prisen = pris;
virkestoffet = virkestoff;
}
public int getId() {
return id;
}
public String getNavnet() {
return navnet;
}
public double getPrisen() {
return prisen;
}
public double getVirkestoffet() {
return virkestoffet;
}
}
ID_GEN
现在是一个类变量,它是"共享"在Legemiddel
的所有实例中。在这种情况下,它是可取的,因为您希望为每个实例保留一个公共生成器,以在不同的实例化之间保留其状态。如果您希望每个实例都有自己的ID,则需要一个单独的实例变量 id
,它不是共享的,但对每个实例都是唯一的。
所有其他字段应为实例变量(无static
),即它们属于一个且仅属于一个实例。如果它们保持static
,则在创建Legemiddel
的多个实例时会遇到麻烦,因为它们会共享navnet
,prisen
和{{1}的相同值在我之前的代码中显示的所有实例中。
现在,随着改变的课程,你不再有这种行为了:
virkestoffet
Here您可以阅读有关班级成员的更多信息。