帮忙看看我的这个问题
想用java实现一个计算器,其中用到了栈,我的代码如下:
Calculate.java
UI.java
Listener.java
Main.java
当我在界面中按一个运算符按键(+,-,*,/和括号)时,我想把运算符存到Calculate中定义的栈中,当我按多个运算符后,栈中应该有多个元素,可是为什么我的Calculate类中的addToStack()方法每次都输出“个数为1”呢?我看了半天没找出原因在哪里,旁观者清,请各位帮忙看看。
Calculate.java
import java.util.*;
class Calculate {
private Stack<Character> sign = new Stack<Character>();
private ArrayList<Character> list = new ArrayList<Character>();
public void addToStack( char c ){
System.out.println("addToStack");
sign.push( c );
System.out.println("符号栈中元素个数为"+sign.size());
}
public void addToList( char c ){
System.out.println("addToList");
list.add( c );
}
public void deleteChar(){
System.out.println("deleteChar");
}
public void emptyStack(){
System.out.println("emptyStack");
}
public void emptyList(){
System.out.println("emptyList");
}
public String result(){
return "结果";
}
} UI.java
import javax.swing.*;
import java.awt.*;
class UI {
private JFrame myCalculate;
private JPanel contentPanel;
private JPanel buttonPanel;
private JTextField result;
private JButton bracketLeft;
private JButton bracketRight;
private JButton num0;
private JButton num1;
private JButton num2;
private JButton num3;
private JButton num4;
private JButton num5;
private JButton num6;
private JButton num7;
private JButton num8;
private JButton num9;
private JButton add;
private JButton sub;
private JButton mul;
private JButton div;
private JButton dot;
private JButton equal;
private JButton delete;
private JButton empty;
private Listener myListener;
public UI(){
myCalculate = new JFrame("计算器");
contentPanel = new JPanel();
BorderLayout borderLayout = new BorderLayout();
borderLayout.setVgap(20);
contentPanel.setLayout(borderLayout);
myCalculate.setContentPane(contentPanel);
result = new JTextField(20);
result.setEditable(false);
bracketLeft = new JButton("(");
bracketRight = new JButton(")");
num0 = new JButton("0");
num1 = new JButton("1");
num2 = new JButton("2");
num3 = new JButton("3");
num4 = new JButton("4");
num5 = new JButton("5");
num6 = new JButton("6");
num7 = new JButton("7");
num8 = new JButton("8");
num9 = new JButton("9");
add = new JButton("+");
sub = new JButton("-");
mul = new JButton("×");
div = new JButton("÷");
dot = new JButton(".");
equal = new JButton("=");
delete = new JButton("删除");
empty = new JButton("清空");
myListener = new Listener();
bracketLeft.addActionListener(myListener);
bracketRight.addActionListener(myListener);
num0.addActionListener(myListener);
num1.addActionListener(myListener);
num2.addActionListener(myListener);
num3.addActionListener(myListener);
num4.addActionListener(myListener);
num5.addActionListener(myListener);
num6.addActionListener(myListener);
num7.addActionListener(myListener);
num8.addActionListener(myListener);
num9.addActionListener(myListener);
add.addActionListener(myListener);
sub.addActionListener(myListener);
mul.addActionListener(myListener);
div.addActionListener(myListener);
dot.addActionListener(myListener);
equal.addActionListener(myListener);
delete.addActionListener(myListener);
empty.addActionListener(myListener);
buttonPanel = new JPanel();
GridLayout gridLayout = new GridLayout(5,4);
gridLayout.setHgap(10);
gridLayout.setVgap(30);
buttonPanel.setLayout(gridLayout);
buttonPanel.add(bracketLeft);
buttonPanel.add(bracketRight);
buttonPanel.add(delete);
buttonPanel.add(empty);
buttonPanel.add(num7);
buttonPanel.add(num8);
buttonPanel.add(num9);
buttonPanel.add(div);
buttonPanel.add(num4);
buttonPanel.add(num5);
buttonPanel.add(num6);
buttonPanel.add(mul);
buttonPanel.add(num1);
buttonPanel.add(num2);
buttonPanel.add(num3);
buttonPanel.add(sub);
buttonPanel.add(equal);
buttonPanel.add(dot);
buttonPanel.add(num0);
buttonPanel.add(add);
contentPanel.add("North",result);
contentPanel.add("Center",buttonPanel);
myCalculate.setSize(300,350);
myCalculate.setVisible(true);
myCalculate.setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE );
}
public void setString( String s ){
result.setText( s );
}
public void addString( String s ){
result.setText( result.getText() + s );
}
public void deleteChar(){
System.out.println("deleteChar");
}
}Listener.java
import java.awt.event.*;
class Listener implements ActionListener {
private boolean isSign( char c ){
switch( c ){
case '(':
case ')':
case '+':
case '-':
case '×':
case '÷':return true;
default:return false;
}
}
private boolean isNum( char c){
if( c >= '.'&&c <= '9')
return true;
else
return false;
}
public void actionPerformed( ActionEvent e ){
Calculate myCalculate = new Calculate();
// System.out.println( e.getActionCommand() );
// Main.calculate.setString( e.getActionCommand() );
String button = e.getActionCommand();
char c = (button.toCharArray())[0];
if( isSign( c ) )
myCalculate.addToStack( c );//把符号添加到栈里
else if( isNum( c ) ){
Main.calculate.addString( button );//把操作数添加到文本框里
myCalculate.addToList( c );//把操作数添加到输出序列中
}
else if( button.equals( "删除" ) ){
Main.calculate.deleteChar();
myCalculate.deleteChar();
}
else if( button.equals( "清空" ) ){
Main.calculate.setString("");
myCalculate.emptyStack();
myCalculate.emptyList();
}
else if( c == '=' )
Main.calculate.setString( myCalculate.result() );
}
}Main.java
public class Main{
static UI calculate;
public static void main( String[] args ){
calculate = new UI();
}
}当我在界面中按一个运算符按键(+,-,*,/和括号)时,我想把运算符存到Calculate中定义的栈中,当我按多个运算符后,栈中应该有多个元素,可是为什么我的Calculate类中的addToStack()方法每次都输出“个数为1”呢?我看了半天没找出原因在哪里,旁观者清,请各位帮忙看看。
...全文
相关推荐
狱吏问题,求解钱币兑换问题,沙漠问题蛮力算法.pdf
"蛮力法在解决计算机科学中的问题时,通常是指通过尝试所有可能的解决方案来找到正确答案的方法。这种方法虽然简单直接,但效率往往较低,适用于问题规模较小的情况。本资源包含了三个使用蛮力法求解的问题:狱吏
P问题、NP难问题详解
本文将深入探讨P问题、NP问题、NPC问题以及NP难问题的概念及其在计算机科学中的重要性。P问题指的是可以通过多项式时间复杂度算法求解的问题,常见的例子如信息奥赛题目,其特点是解的搜索过程在问题规模增
lingo数学建模 生产安排问题 汽车广告费问题 运输问题与转运问题.ppt
本资料主要涉及了LINGO在生产安排、汽车广告费用以及运输和转运问题中的应用。一、生产安排问题生产安排问题是企业运营中常见的一种优化问题,目标是最大化利润或最小化成本。
P问题、NP问题、NP完全问题和NP难问题理解
1.P(polynominal)问题–多项式问题存在多项式时间算法的问题。2.NP(Nondeterministic Polynominal)问题–非确定多项式问题能在多项式时间内验证得出一个正确解的
旅行商问题(TSP问题)
"旅行商问题(TSP问题)的解决方法,包括穷举策略中的深度优先搜索与回溯法,以及启发式策略中的贪心算法和蚁群算法。"旅行商问题(Traveling Salesman Problem,TSP)是运筹


Java SE
