首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

帮忙分析一下书上的这个计算器算法.有些疑问,该怎么处理

2012-02-28 
帮忙分析一下书上的这个计算器算法...有些疑问问题参夹在代码中.....package v1ch9.Calculatorimport jav

帮忙分析一下书上的这个计算器算法...有些疑问
问题参夹在代码中.....

package v1ch9.Calculator;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Calculator
{
  public static void main(String[] args)
  {  
  CalculatorFrame frame = new CalculatorFrame();
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  frame.setVisible(true);
  }
}

class CalculatorFrame extends JFrame
{
  public CalculatorFrame()
  {
  setTitle("Calculator");
  CalculatorPanel panel = new CalculatorPanel();
  add(panel);
  pack();
  }
}

class CalculatorPanel extends JPanel
{  
  public CalculatorPanel()
  {  
  setLayout(new BorderLayout());

  result = 0;
  lastCommand = "=";
  start = true;
   
  // add the display

  display = new JButton("0");
  display.setEnabled(false);
  add(display, BorderLayout.NORTH);
   
  ActionListener insert = new InsertAction();
  ActionListener command = new CommandAction();

  // add the buttons in a 4 x 4 grid

  panel = new JPanel();
  panel.setLayout(new GridLayout(4, 4));

  addButton("7", insert);
  addButton("8", insert);
  addButton("9", insert);
  addButton("/", command);

  addButton("4", insert);
  addButton("5", insert);
  addButton("6", insert);
  addButton("*", command);

  addButton("1", insert);
  addButton("2", insert);
  addButton("3", insert);
  addButton("-", command);

  addButton("0", insert);
  addButton(".", insert);
  addButton("=", command);
  addButton("+", command);

  add(panel, BorderLayout.CENTER);
  }

  private void addButton(String label, ActionListener listener)
  {  
  JButton button = new JButton(label);
  button.addActionListener(listener);
  panel.add(button);
  }

  private class InsertAction implements ActionListener
  {
  public void actionPerformed(ActionEvent event)
  {
  String input = event.getActionCommand();
  if (start) 
  {
  display.setText("");
  start = false;
  }
  display.setText(display.getText() + input);
  }
  }
  private class CommandAction implements ActionListener
  {
  public void actionPerformed(ActionEvent event)
  {  
  String command = event.getActionCommand();

  if (start)
  {  
  if (command.equals("-")) 
  { 
  display.setText(command); 
  start = false; 
  }
  else 
  lastCommand = command;
  }
  else
  {  
  calculate(Double.parseDouble(display.getText()));
  lastCommand = command;
  start = true;


  }
  }
  }
   
  //下面这个方法计算用来计算..我试了一下,输入数字后,再按一下+-*/其中一个命令键,就会把输入的数字改为DOUBLE类型后显示,问题是好象
RESULT 被初始化为0, 所以result(+-*/)=x这样的式子得出的结果显示不应该是原数吧???但在计算器上的是正确的...
  public void calculate(double x)
  {
  if (lastCommand.equals("+")) result += x;
  else if (lastCommand.equals("-")) result -= x;
  else if (lastCommand.equals("*")) result *= x;
  else if (lastCommand.equals("/")) result /= x;
  else if (lastCommand.equals("=")) result = x;
  display.setText("" + result);
  }
   
  private JButton display;
  //JButton 定义的不是一个按键吗??怎么显示在计算器上的不是??高手帮分析下原理  
  private JPanel panel;
  private double result;
  private String lastCommand;
  private boolean start;
}


[解决办法]
"result(+-*/)=x这样的式子得出的结果显示不应该是原数吧???"
表达式相当于result = result +-*/ x 这样子得到的结果怎么会是原数呢?

 
JButton 定义的不是一个按键吗??怎么显示在计算器上的不是??//
display是一个JButton.本来按键显示的时候应该是浅蓝色的,
 然后在你的程序中用 display.setEnabled(false); 把按键给禁用了,看起来就是灰色的。
 LZ把这句给注释掉再看下结果

热点排行