Java计算器类对象创建报错:实际与形式参数列表长度不一致
解决Java构造方法参数不匹配错误(actual and formal argument lists differ in length)
错误原因
你编写的Calculator类只定义了一个带4个参数的构造方法:public Calculator(double a, double b, double r, char op)。Java的规则是:如果类中显式定义了构造方法,编译器就不会自动生成默认的无参构造方法。但你在CalculatorTest的main方法里用new Calculator()创建对象,这是在调用不存在的无参构造,所以会报「实际参数和形式参数列表长度不匹配」的错误。
方案1:添加无参构造方法
在Calculator类中添加一个无参构造,这样就能用new Calculator()创建对象,之后再通过setter方法给变量赋值。
修改后的Calculator类代码:
public class Calculator { //instance variables private double num1; private double num2; private double result; private char operator; // 添加无参构造方法(可以留空,也可以给变量设置默认值) public Calculator() { num1 = 0; num2 = 0; result = 0; operator = '+'; } public Calculator (double a, double b, double r, char op) { num1= a; num2= b; result= r; operator = op; } // 以下原有方法保持不变 public void setnum1(double a) { num1 = a; } public double getnum1() { return num1; } public void setnum2(double b) { num2= b; } public double getnum2() { return num2; } public void setoperator(char op) { operator = op; } public char getoperator() { return operator; } public void showcalculator() { System.out.println("Welcome!"); System.out.println("1 2 3 +"); System.out.println("4 5 6 -"); System.out.println("7 8 9 *"); System.out.println("0 00 . /"); } public String toString() { // 注意:原代码里的/n是错误的,改成\n才能正确换行 return ("First variable:"+ num1+ "\n Second variable:"+ num2+ "\n Result of "+ num1+ operator + num2+ " = "+ result); } }
方案2:创建对象时传入构造方法要求的4个参数
既然Calculator的构造方法需要4个参数,那就直接在创建对象时传入对应参数。根据你的代码逻辑,可以先获取用户输入,再传入构造方法:
修改后的CalculatorTest代码:
import java.util.Scanner; public class CalculatorTest { public static void main (String args[]) { Scanner input = new Scanner (System.in); double a,b,r = 0; // 先给result设默认值,后续可计算后修改 char m; // 先获取用户输入 System.out.println("Enter your first variable: "); a = input.nextDouble(); System.out.println("Input your second variable: "); b= input.nextDouble(); System.out.println("Input the operator: "); m = input.next().charAt(0); // 传入4个参数创建Calculator对象 Calculator C1 = new Calculator(a, b, r, m); C1.showcalculator(); // 后续如果需要计算并更新result,可以给Calculator类添加setResult方法: // public void setResult(double newResult) { this.result = newResult; } // 然后调用C1.setResult(计算结果); } }
内容的提问来源于stack exchange,提问作者Tanjim Hasan Sohan
相关产品推荐
相关产品推荐

