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

Java如何通过数组/ArrayList将用户输入变量传递给其他类方法

问题原因

  • 你创建Addition/Subtraction等子类实例的时机过早:初始化运算类数组时你传入的是num1=0、num2=0的初始值,Java基本数据类型是值传递,此时子类实例的成员变量已经被固定为初始值,后续修改主方法里的num1、num2变量不会同步更新到已经实例化的子类对象中。
  • 你调用calculate()方法时没有把新输入的数值传递给对应实例,方法只能读取到实例化时传入的初始值0。
  • 补充:你现有代码的while循环中没有更新operation变量的逻辑,会出现无限循环的问题,需要补充对应逻辑。

修复方案

方案1:最小改动适配现有代码结构

在获取到用户输入的num1、num2之后、调用calculate()之前,给选中的运算实例的成员变量重新赋值即可,修改后的switch分支和循环收尾逻辑如下:

switch (operation)  
{
    case '+':
        allMath[0].num1 = num1;
        allMath[0].num2 = num2;
        allMath[0].calculate();
        break;
    case '-':
        allMath[1].num1 = num1;
        allMath[1].num2 = num2;
        allMath[1].calculate();
        break;
    case '*':
        allMath[2].num1 = num1;
        allMath[2].num2 = num2;
        allMath[2].calculate();
        break;
    case '/':
        allMath[3].num1 = num1;
        allMath[3].num2 = num2;
        allMath[3].calculate();
        break;
    default:
        System.out.println("输入的运算符不合法,请重新输入");
}
// 补充下一轮运算符输入逻辑,避免死循环
System.out.println("请输入下一次要执行的运算符,输入!退出程序:");
operation = input.next().charAt(0);

方案2:优化方法定义(符合抽象类要求可选用)

如果允许修改抽象父类的方法定义,可以把calculate抽象方法改为接收两个double参数的形式,子类实现时直接用传入的参数计算,不需要在实例中存储冗余的数值变量:

  1. 抽象父类方法定义:
public abstract void calculate(double num1, double num2);
  1. Addition子类实现示例:
@Override
public void calculate(double num1, double num2)
{
    System.out.println(num1 + " + " + num2 + " is " + (num1 + num2)); 
}
  1. 调用时直接传输入的数值即可,不需要单独给实例成员变量赋值:
case '+':
    allMath[0].calculate(num1, num2);
    break;

内容的提问来源于stack exchange,提问作者Koryn Pascoe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:54:05