Java代码编译报错:实参与形参长度不匹配问题求解
Java编译报错"actual and formal argument lists differ in length"解决办法
首先你的猜测有误,该报错和方法返回值为void无关,触发报错的核心原因有两个:
- 你定义的
processUbuntu方法要求传入3个形参(String类型的name、String类型的date、double类型的number),但在main方法中调用时没有传入任何实参,参数长度不匹配,这就是该报错的直接触发原因。 processUbuntu是未加static修饰的实例方法,静态的main方法无法直接调用,修复参数问题后还会触发"非静态方法不能从静态上下文引用"的编译错误,需要同步处理。
根据你需要保留原有代码格式的要求,提供两种可选择的修复方案:
方案1:允许调整方法形参列表(代码逻辑更合理)
由于你在processUbuntu方法内部直接覆盖了所有形参的数值,外部传入的参数没有实际作用,可以直接删除形参列表,同时给方法加static修饰即可,修复后完整代码如下:
public class RSubuntuPgm1 { public static void main (String arg[]){ System.out.printf("\ngedit"); System.out.printf("\nCtrl + S"); System.out.printf("\nAlt + F4"); processUbuntu(); } public static void processUbuntu(){ String name = "Sean"; double number = 2021.99; String date = "Fall"; System.out.printf("\n%s",name); System.out.printf("\n%.5f",number); // 10 spaces, 5 more spaces for decimals System.out.printf("\n%S",date); //capital S makes all capital } }
方案2:必须保留原有方法的三个形参定义
如果作业要求不能修改processUbuntu的形参列表,只需要在调用方法时传入三个对应类型的参数,同时给方法加static修饰即可,传入的参数会被方法内部的赋值覆盖,不影响最终输出,修复后完整代码如下:
public class RSubuntuPgm1 { public static void main (String arg[]){ System.out.printf("\ngedit"); System.out.printf("\nCtrl + S"); System.out.printf("\nAlt + F4"); processUbuntu("", "", 0); } public static void processUbuntu(String name, String date, double number){ name = "Sean"; number = 2021.99; date = "Fall"; System.out.printf("\n%s",name); System.out.printf("\n%.5f",number); // 10 spaces, 5 more spaces for decimals System.out.printf("\n%S",date); //capital S makes all capital } }
内容的提问来源于stack exchange,提问作者Angry Toast
相关产品推荐
相关产品推荐

