有没有办法重置类中的变量并让函数设置其值?

时间:2019-03-06 02:52:04

标签: scala class object model-view-controller

因此,基本上,我正在尝试制作一个没有控制流程的计算器。我有一个计算器类,该类具有将在Controller中调用的功能(它具有所有操作类,例如加法,等于等,与从GUI单击按钮相对应)。在计算器类中,我有三个变量:displayvalue,LHS和RHS。 displayvalue是用户按下按钮时输入的值(一个函数进行数学运算,并将点击次数“ 1”,“ 2”,“ 3”设为数字123并将其设置为displayvalue)。我希望在添加操作将LHS重置为0.0之前,先将LHS设为displayvalue。重置后,我希望RHS是用户按钮单击时的新输入。有没有办法做到这一点?这是我到目前为止所尝试的(但是它不响应加法动作,并且不断增加输入(例如:我单击“ 1”,“ 2”,“ +”和“ 3”,我得到123,好像我从来没有点击“ +”)

class AdditionAction(calculator: Calculator) extends EventHandler[ActionEvent] {
  override def handle(event: ActionEvent): Unit = {
    calculator.LHS = calculator.displayValue //store current displayvalue
    calculator.reset() //reset displayvalue
    calculator.setUp("AdditionAction") //try to get the new displayvalue
    calculator.displayValue = calculator.LHS + calculator.RHS //perform addition
  }
}

来自计算器类:

var displayValue = 0.0
var LHS: Double = displayValue
var RHS = 0.0

def setUp(input: String): Unit = {
    this.RHS = this.displayValue
    this.operation = input
  }

  def reset(): Unit ={
    this.displayValue = 0.0
  }

  def displayNumber(): Double = {
    displayValue
  }

1 个答案:

答案 0 :(得分:0)

这里有两个主要问题。

首先,您的事件处理函数不会更改displayValue的值。 如果遵循事件处理程序的逻辑,则会看到resetdisplayValue设置为0.0,而setUpdisplayValue复制到RHS。因此,RHS始终是0.0,计算仅返回复制到displayValue的{​​{1}}的原始值。

第二,您正在使用LHS来存储用户输入和结果。因此,当用户输入另一个数字时,您的代码将假定displayValue是用户输入的内容,而只是将数字附加到数字上,而不是开始一个新的数字。

为避免第一个问题,最好将计算器状态存储在不可变的结构中,并编写基于旧状态生成新状态的方法。这将使逻辑更容易遵循。使用displayValuereset之类的方法具有可变数据结构使逻辑难以遵循,并且是一种非标量的处理方式。

要解决第二个问题,您需要分别跟踪输入和输出,或者跟踪计算器的状态以了解显示是输入还是输出。