【问题标题】:I want to get multiple calculations like 2+2+2 in my jframe calculator [closed]我想在我的 jframe 计算器中获得多个计算,例如 2+2+2 [关闭]
【发布时间】:2016-10-26 20:13:56
【问题描述】:

我正在为一个学校项目制作一个 jFrame 计算器,但每当我尝试计算 2+2+2 之类的东西时,我都会得到 4。就像它只计算最后 2 位数字一样。有谁知道如何解决这一问题?这是我的代码

//numbers
private void NulNulActionPerformed(java.awt.event.ActionEvent evt) {                                       
Display.setText(Display.getText()+NulNul.getText());
}                                      

private void NulActionPerformed(java.awt.event.ActionEvent evt) {                                    
Display.setText(Display.getText()+Nul.getText());
}                                   

private void PuntActionPerformed(java.awt.event.ActionEvent evt) {                                     
if(PointClick == 0){
Display.setText(Display.getText()+Punt.getText());    
}
else{
    Punt.enable(false);

}
PointClick = 1;
}                                    

private void EenActionPerformed(java.awt.event.ActionEvent evt) {                                    
Display.setText(Display.getText()+Een.getText());
}                                   

private void TweeActionPerformed(java.awt.event.ActionEvent evt) {                                     
Display.setText(Display.getText()+Twee.getText());
}                                    

private void DrieActionPerformed(java.awt.event.ActionEvent evt) {                                     
Display.setText(Display.getText()+Drie.getText());
}                                    

private void VierActionPerformed(java.awt.event.ActionEvent evt) {                                     
Display.setText(Display.getText()+Vier.getText());
}                                    

private void VijfActionPerformed(java.awt.event.ActionEvent evt) {                                     
Display.setText(Display.getText()+Vijf.getText());
}                                    

private void ZesActionPerformed(java.awt.event.ActionEvent evt) {                                    
Display.setText(Display.getText()+Zes.getText());
}                                   

private void ZevenActionPerformed(java.awt.event.ActionEvent evt) {                                      
Display.setText(Display.getText()+Zeven.getText());
}                                     

private void AchtActionPerformed(java.awt.event.ActionEvent evt) {                                     
Display.setText(Display.getText()+Acht.getText());
}                                    

private void NegenActionPerformed(java.awt.event.ActionEvent evt) {                                      
Display.setText(Display.getText()+Negen.getText());
}                                     

//Clear
private void ClearActionPerformed(java.awt.event.ActionEvent evt) {                                      
Display.setText("");
PointClick = 0;
}                                     

//Back
private void BackActionPerformed(java.awt.event.ActionEvent evt) {                                     
String text;
text = Display.getText();
int len = text.length();
text = text.substring(0, len-1);
Display.setText(text);
}                                    

private void PlusActionPerformed(java.awt.event.ActionEvent evt) {                                     
firstnumber = Double.parseDouble(Display.getText());
Display.setText("");
PlusClick= 1;
MinusClick = MultiplyClick = DivideClick = PercentClick = PowerClick = PointClick = 0;
}                                    

private void EqualsActionPerformed(java.awt.event.ActionEvent evt) {                                       
secondnumber = Double.parseDouble(Display.getText());
if(PlusClick > 0){
    Result = firstnumber + secondnumber;
    Display.setText(String.valueOf(Result));
}
else if(MinusClick > 0){
    Result = firstnumber - secondnumber;
Display.setText(String.valueOf(Result));
}
else if(MultiplyClick > 0){
    Result = firstnumber * secondnumber;
Display.setText(String.valueOf(Result));
}
else if(DivideClick > 0){
    Result = firstnumber / secondnumber;
Display.setText(String.valueOf(Result));
}
else if(PowerClick > 0){
    for(int i=1;i<=secondnumber;i++)
    {
        Result = Result * firstnumber;
    } 
Display.setText(String.valueOf(Result));    
}
else if(PercentClick > 0){
    Result = (firstnumber * secondnumber) / 100;
Display.setText(String.valueOf(Result));    
}
}                                      

private void MinActionPerformed(java.awt.event.ActionEvent evt) {                                    
firstnumber = Double.parseDouble(Display.getText());
Display.setText("");
MinusClick= 1;
PlusClick = MultiplyClick = DivideClick = PercentClick = PowerClick = PointClick = 0;
}                                   

private void KeerActionPerformed(java.awt.event.ActionEvent evt) {                                     
firstnumber = Double.parseDouble(Display.getText());
Display.setText("");
MultiplyClick= 1;
MinusClick = PlusClick = DivideClick = PercentClick = PowerClick = PointClick = 0;
}                                    

private void DelenActionPerformed(java.awt.event.ActionEvent evt) {                                      
firstnumber = Double.parseDouble(Display.getText());
Display.setText("");
DivideClick= 1;
MinusClick = MultiplyClick = PlusClick = PercentClick = PowerClick = PointClick = 0;
}                                     

private void WortelActionPerformed(java.awt.event.ActionEvent evt) {                                       
firstnumber = Double.parseDouble(Display.getText());
Display.setText(String.valueOf(Math.sqrt(firstnumber)));
}                                      

private void PIActionPerformed(java.awt.event.ActionEvent evt) {                                   
Display.setText(String.valueOf(Math.PI));
}                                  

private void MachtActionPerformed(java.awt.event.ActionEvent evt) {                                      
firstnumber = Double.parseDouble(Display.getText());
Display.setText("");
PowerClick= 1;
MinusClick = MultiplyClick = PlusClick = PercentClick = DivideClick = PointClick = 0;
}                                     

private void ProcentActionPerformed(java.awt.event.ActionEvent evt) {                                        
firstnumber = Double.parseDouble(Display.getText());
Display.setText("");
PercentClick= 1;
MinusClick = MultiplyClick = PlusClick = PowerClick = DivideClick = PointClick = 0;
}                                       

private void InverseActionPerformed(java.awt.event.ActionEvent evt) {                                        
firstnumber = Double.parseDouble(Display.getText());
Display.setText(String.valueOf(1 / firstnumber));
}                                       

private void PlusminusActionPerformed(java.awt.event.ActionEvent evt) {                                          
firstnumber = Double.parseDouble(Display.getText());
Display.setText(String.valueOf((-1) * firstnumber));
}                                         

【问题讨论】:

  • 你只有firstnumbersecondnumber,所以它只加了两个数字。你到底做了什么尝试,让它可以处理两个以上的数字?
  • 请学会缩进代码以显示程序结构!
  • 嗯,重点是,这有点像我的第一天 java,我不太喜欢它......

标签: java math jframe calculator


【解决方案1】:

它确实只计算最后 2 个数字,因为您不存储任何以前的数字。为了清楚起见,让我们将您的示例设为 2+3+4。你的步骤是:

  1. 阅读 2
  2. 读取+,将2存储为firstnumber
  3. 阅读 3
  4. 读取 +,将 3 存储为 firstnumber(覆盖我们之前的值)
  5. 阅读 4
  6. 读取=,将4存储为secondnumber,计算firstnumber + secondnumber

您应该使用您的方法在第 4 步(如果需要,在后续步骤中)计算“子结果”并将其存储在 firstnumber 变量中。

【讨论】:

  • 我知道你在想什么,但我不知道将它编辑到我的代码中,我从很多教程中得到了一切。
  • @Benjamin 您必须存储两个信息:(a)是第一次操作吗?如果否 - 计算 (b) 最后一次操作是什么?然后检查每个非数字输入。请注意,您可以在每个操作中使用完全相同的方法进行计算(包括equalsAction)。因此,您可以从 equalsActionPerformed 方法中的内容开始。它非常接近它应该看起来的样子。将其提取到外部方法并尝试在每个步骤中使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-20
  • 1970-01-01
  • 2017-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多