编译报错:Transcript类构造器参数不匹配问题求助
嘿,这个错误我太熟了——本质就是你调用Transcript构造函数的时候,传的参数和它定义的要求完全对不上!咱先把错误信息拆明白:
constructor in Transcript in class Transcript cannot be applied to given types; required: java.lang.String, java.lang.String, int, int found: java.lang.String reason: actual and formal arguments differ in length
这段报错直接把问题说透了:
- 你的
Transcript类里定义的构造函数,必须要4个参数:两个String类型,两个int类型 - 但你实际创建
Transcript对象的时候,只传了1个String参数,参数数量差了3个,所以编译器直接报错了
下面分两种常见情况给你解决办法:
情况1:你确实需要使用这个4参数的构造函数
那你得检查自己调用构造函数的代码,补上缺失的参数。比如你现在的调用可能是这样的:
// 错误写法:只传了1个参数 Transcript myTrans = new Transcript("数据结构");
你需要改成符合构造函数要求的写法,比如根据作业里Transcript类的设计意图,传入对应的参数(比如第一个String是课程名,第二个是学生姓名,两个int是成绩和学分):
// 正确写法:传满4个要求的参数 Transcript myTrans = new Transcript("数据结构", "李小明", 85, 4);
这里要注意,参数的顺序和类型必须和构造函数定义的完全一致,不能乱序哦。
情况2:你本来就想用1个String参数创建对象
那你需要在Transcript类里新增一个只接受1个String参数的构造函数。比如在你的Transcript.java文件里添加这段代码:
public class Transcript { // 保留原来的4参数构造函数(如果作业要求不能删除的话) public Transcript(String courseName, String studentName, int score, int credit) { // 这里是原来构造函数的初始化代码,比如给成员变量赋值 this.courseName = courseName; this.studentName = studentName; this.score = score; this.credit = credit; } // 新增你需要的1参数构造函数 public Transcript(String courseName) { // 这里可以给其他参数设置合理的默认值,或者根据需求初始化 this.courseName = courseName; this.studentName = ""; // 比如默认空姓名 this.score = 0; // 默认0分 this.credit = 0; // 默认0学分 } }
添加之后,你再调用new Transcript("数据结构")就不会报错了。
最后提个小建议:如果这是课程作业,最好先核对一下作业要求里对Transcript类的构造函数的规定——是不是必须使用4参数的构造函数?如果是,那一定要确保自己的调用没有漏传参数哦。
内容的提问来源于stack exchange,提问作者PancakesWithButter

