JAVA无法将类 Competitor中的构造器 Competitor应用到给定类型

publicclassCompetitor{publicstaticfinalString[]COMPETITOR_DESCRIPTIONS={"AGrade","BGr... public class Competitor {
public static final String[] COMPETITOR_DESCRIPTIONS = {"A Grade", "B Grade", "Senior"};
public static final int A_GRADE = 0;
public static final int B_GRADE = 1;
public static final int SENIOR = 2;

private String name;
private int number;
private int typeIndex;
private int age;
private int position=-1;

public Competitor(String name, int number, int typeIndex, int age) {
this.name=name;
this.number=number;
this.typeIndex=typeIndex;
this.age=age;
}

public boolean addCompetitor(Competitor competitor) {
if(numberOfCompetitors<MAX_COMPETITORS){
competitors[numberOfCompetitors]=new Competitor();
competitors[numberOfCompetitors]=competitor;
numberOfCompetitors++;
return true;
}
return false;
}}
上面一个是我在competitor.java里定义的构造器;下面一个是另外一个java文件里的,请问我定义的 competitors[numberOfCompetitors]=new Competitor();哪里不对啊
对于addCompetitor,我已经定义了Competitor[]competitors=new Competitor[ MAX_COMPETITORS];
展开
 我来答
zengqy5681
2013-09-29
知道答主
回答量:12
采纳率:0%
帮助的人:4.3万
展开全部
兄弟,看了一下你的问题,主要错误如下:
你已经提供了一个带参数的构造函数 public Competitor(String name, int number, int typeIndex, int age), 此时你没有调用的确实一个不带参数的构造函数,因此程序好不到对应的构造函数,决绝办法是在Competitor.java(注意文件名要和public的类名一致)中重载一个不带参数的构造函数public Competitor(){}; 或者修改competitors[numberOfCompetitors]=new Competitor(),让其调用带参数的构造函数。
另外你的addCompetitor(Competitor competitor)函数也有问题 。处于性能和存储空间考虑,介意你 删除 competitors[numberOfCompetitors]=new Competitor();这句。
追问
这个是我们的作业,我在国外上这个,所以一开始听的云里雾里的,我之前试过您说的删除 competitors[numberOfCompetitors]=new Competitor();这句,结果确实能编译成功,但是输出程序的时候说的是: NullPrinterException什么的,而且就是出现在这个addCompetitor里,然后那个系统不让动,他明确标出了只能动哪些东西,
追答
你说的应该是NullPointException吧?如果是的话,能在addCompetitor方法中出现NullPointException的地方只有competitors[numberOfCompetitors]=competitor这句,也就是说,你的competitors这个数组是一个null,应该是你们对他就行初始化,或者在什么地方把它置为null了?由于你给的信息不是很全,不过你说过你已经“对于addCompetitor,我已经定义了Competitor[]competitors=new Competitor[ MAX_COMPETITORS];”,这个你放在什么地方的,位置不一样访问权限也不一样,有可能你的这个addCompetitor方法中根本就访问不了,你可以将Competitor[]competitors=new Competitor[ MAX_COMPETITORS];”放到private int position=-1;这句后面,试试!如果还不行的话,可以的情况下你可以将这个工程发给我,我给你调试一下!
匿名用户
2013-09-29
展开全部
这个Competitor 没有 默认构造器。
(1)构造方法的方法名必须与类名相同。
(2)构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型。
(3)构造方法的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。
(4)一个类可以定义多个构造方法,如果在定义类时没有定义构造方法,则编译系统会自动插入一个无参数的默认构造器,这个构造器不执行任何代码。
(5)构造方法可以重载,以参数的个数,类型,或排列顺序区分。
java 类的构造默认是不带参的,如果要重载其默认不带参的构造,而又想使用默认不带参的构造的话,必须将其默认构造写出。
更多追问追答
追问
不好意思我是小白,不是很明白您说的,能告诉我怎么在我这个程序里解决这个问题吗
追答
添加一个默认构造 。 public Competitor(){}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
daojianqingcho
2013-09-29 · TA获得超过452个赞
知道小有建树答主
回答量:141
采纳率:0%
帮助的人:140万
展开全部
你在competitor.java里再加个构造器:public Competitor(){} ,也就是个无参构造器,就可以了。
追问
public Competitor(String name, int number, int typeIndex, int age) {
this.name=name;
this.number=number;
this.typeIndex=typeIndex;
this.age=age;
}这个不是competitor的构造器么?如果我要加入构造器,请问怎么加呢?
追答
再加个无参构造器啊,就是括号里没有参数的,明白了吗?
放置的位置和另一个构造器平行即可。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式