我正在尝试开发一个简单的计算器,当用户不断单击数字时,它们会出现在文本区域中。如果他们单击一个运算符(“ +”,“-”,“ *”等),文本区域上的数字以及他们单击的运算符,则会分别保存在数字和运算符变量上。当用户在单击运算符后单击另一个数字时,应删除jtextarea上的数字,并在其上写入新数字,以便我可以将其存储在第二个数字变量中,并最终对两个数字进行操作数字。
我面临的问题是,当用户第二次单击数字时,即单击运算符后,我找不到清除文本区域内容的方法,并且还不断添加被点击的数字。如果我放一个代码来清除文本区域并附加一个数字,它所做的就是清除前一个数字,并写仅一个数字,例如,如果我想写“ 857”,只能写“ 8”,如果单击“ 5”,则清除“ 8”并写“ 5”。
我理解并理解为什么它不起作用,因为每次用户单击数字时都会出现明码和附加代码。因此,我想知道是否可以解决此问题,以及是否可以:清除文本,然后继续添加文本,即,用户第二次单击数字时,应将数字附加在屏幕,看不清。
答案 0 :(得分:0)
我想用程序设计中的两个概念来解决这个问题:第一个是设计对外部功能的依赖,第二个是状态机。
我在这里做出一些猜测和假设,但是从您的描述看来,您已经固定到文本区域的“附加”功能,并且正在编程,以便可以在以下两种情况下使用它:在显示屏上显示一个数字,然后在显示屏上放置一个新的数字(“追加”到空白显示)。
这是textarea的一个不错的功能,它可能对您的程序很有用,但是您不必在这里使用它。
无论如何解决此问题,您都需要保存一个“状态”,当用户按下某个键时,程序执行的操作取决于其状态。您必须能够辨别它处于什么状态,以便可以正确地编程对按键的响应。
因此,我建议这样做:有一个变量可以存储您想要的显示内容-全部。当有人按下某个键时,以任何方式识别您的状态,并使用应该在显示中显示的内容更新该变量。完成处理后,将文本区域设置为该变量的值。
请注意,这使程序流程(接收输入,处理,显示)在所有情况下都相同。程序的任何部分都不必弄清楚是否要“清除”显示内容。因此,您保存状态的复杂性降低了。
如果您的状态是“为第一个操作数累加数字”,并且按下了数字,则将所按下的数字附加到显示的字符串之后。
如果您的状态为“正在累积...”并且按下了运算符,请追加该运算符。
如果您的状态是“刚按下操作员”并且又按下了另一个数字,请将变量设置为按下的数字。
等等。
这些可能是正确的状态,也可能不是正确的状态,这里仅作为简单示例。但是以类似的方式进行操作,我认为您会发现程序变得更易于编写和理解-删除了“附加”功能与程序状态之间相互作用的代码,这使您的代码比它复杂需要。
我发现,对于程序员(包括我自己)来说,很常见的一点是要附加到我们随后要解决的某些实现上-实际上,我们在某种程度上一直在围绕实现进行工作,这就是我们所做的。但是有时候,如果我们退后一步,我们会发现我们围绕着一些我们可以消除的实现细节进行了更多的编程,并且通过消除实现细节可以简化我们的解决方案。