You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 07:35:28