java制作简易计算器图形界面并完成四则运算(不含小数)

因为在java入门就先做一下简单的来练一下手,这边我的图形界面使用windowbuilder制作的,这个可以托框,布局也比用手打方便很多。这个感觉图形界面不是主要的难点,重点还是在于对于四则运算的方法。不多说放代码,里面有注释。

图形界面代码

/* 图形界面代码,放在了一个Caculator类中,用window builder可以做出自己想要的布局*/
/*Caculator.java*/
package caculator;

import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JTextField;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JPanel;
import java.awt.Font;

public class Caculator {

	private JFrame frame;
	private JTextField text1;
	private JTextField text2;

	public String getText1() {
		return text1.getText();
	}
	public String getText2() {
		return text2.getText();
	}
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Caculator window = new Caculator();
					window.frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the application.
	 */
	public Caculator() {
		initialize();
	}

	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize() {
		frame = new JFrame();
		frame.setBounds(100, 100, 746, 607);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		text1 = new JTextField();
		text1.setFont(new Font("宋体", Font.PLAIN, 26));
		text1.setColumns(10);
		
		text2 = new JTextField();
		text2.setFont(new Font("宋体", Font.PLAIN, 26));
		text2.setColumns(10);
		
		JButton button_left = new JButton("(");
		button_left.setFont(new Font("宋体", Font.PLAIN, 26));
		button_left.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				String s="(";
				text1.setText(text1.getText()+s);
			}
		});
		
		
		JButton button_right = new JButton(")");
		button_right.setFont(new Font("宋体", Font.PLAIN, 26));
		button_right.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				String s=")";
				text1.setText(text1.getText()+s);
			}
		});
		
		
		JButton button_result = new JButton("=");
		button_result.setFont(new Font("宋体", Font.PLAIN, 26));
		button_result.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
                    Result s=new Result();
                    s.str=text1.getText();
                    text2.setText(String.valueOf(s.result()));
			}
		});
		
		JButton button7 = new JButton("7");
		button7.setFont(new Font("宋体", Font.PLAIN, 26));
		button7.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				String s="7";
				text1.setText(text1.getText()+s);
			}
		});
		
		JButton button8 = new JButton("8");
		button8.setFont(new Font("宋体", Font.PLAIN, 26));
		button8.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				String s="8";
				text1.setText(text1.getText()+s);
			}
		});
		
		JButton button_point = new JButton(".");
		button_point.setFont(new Font("宋体", Font.PLAIN, 26));
		button_point.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				String s=".";
				text1.setText(text1.getText()+s);
			}
		});
		
		JButton button1 = new JButton("1");
		button1.setFont(new Font("宋体", Font.PLAIN, 26));
		button1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				String s="1";
				text1.setText(text1.getText()+s);
			}
		});
		
		JButton button4 = new JButton("4");
		button4.setFont(new Font("宋体", Font.PLAIN, 26));
		button4.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				String s="4";
				text1.setText(text1.getText()+s);
			}
		});
		
		JButton button5 = new JButton("5");
		button5.setFont(new Font("宋体", Font.PLAIN, 26));
		button5.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				String s="5";
				text1.setText(text1.getText()+s);
			}
		});
		
		JButton button2 = new JButton("2");
		button2.setFont(new Font("宋体", Font.PLAIN, 26));
		button2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String s="2";
				text1.setText(text1.getText()+s);
			}
		});
		
		JButton button0 = new JButton("0");
		button0.setFont(new Font("宋体", Font.PLAIN, 26));
		button0.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				String s="0";
				text1.setText(text1.getText()+s);
			}
		});	
		
		JButton button9 = new JButton("9");
		button9.setFont(new Font("宋体", Font.PLAIN, 26));
		button9.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				String s="9";
				text1.setText(text1.getText()+s);
			}
		});
		
		JButton button6 = new JButton("6");
		button6.setFont(new Font("宋体", Font.PLAIN, 26));
		button6.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				String s="6";
				text1.setText(text1.getText()+s);
			}
		});
		JButton button3 = new JButton("3");
		button3.setFont(new Font("宋体", Font.PLAIN, 26));
		button3.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				String s="3";
				text1.setText(text1.getText()+s);
			}
		});
		
		JButton button_add = new JButton("+");
		button_add.setFont(new Font("宋体", Font.PLAIN, 26));
		button_add.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				String s="+";
				text1.setText(text1.getText()+s);
			}
		});
		
		JButton button_sub = new JButton("-");
		button_sub.setFont(new Font("宋体", Font.PLAIN, 26));
		button_sub.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				String s="-";
				text1.setText(text1.getText()+s);
			}
		});
		
		JButton button_mul = new JButton("*");
		button_mul.setFont(new Font("宋体", Font.PLAIN, 26));
		button_mul.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				String s="*";
				text1.setText(text1.getText()+s);
			}
		});
		
		JButton button_div = new JButton("/");
		button_div.setFont(new Font("宋体", Font.PLAIN, 26));
		button_div.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				String s="/";
				text1.setText(text1.getText()+s);
			}
		});
		JButton btnC = new JButton("C");
		btnC.setFont(new Font("宋体", Font.PLAIN, 26));
		btnC.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				text1.setText(null);
			}
		});
		GroupLayout groupLayout = new GroupLayout(frame.getContentPane());
		groupLayout.setHorizontalGroup(
			groupLayout.createParallelGroup(Alignment.TRAILING)
				.addComponent(text1, GroupLayout.DEFAULT_SIZE, 724, Short.MAX_VALUE)
				.addGroup(groupLayout.createSequentialGroup()
					.addContainerGap()
					.addComponent(button_left, GroupLayout.PREFERRED_SIZE, 82, GroupLayout.PREFERRED_SIZE)
					.addGap(119)
					.addComponent(button_right, GroupLayout.PREFERRED_SIZE, 90, GroupLayout.PREFERRED_SIZE)
					.addGap(230)
					.addComponent(text2, GroupLayout.PREFERRED_SIZE, 163, GroupLayout.PREFERRED_SIZE))
				.addGroup(groupLayout.createSequentialGroup()
					.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
						.addComponent(button7, GroupLayout.PREFERRED_SIZE, 113, GroupLayout.PREFERRED_SIZE)
						.addComponent(button4, GroupLayout.PREFERRED_SIZE, 113, GroupLayout.PREFERRED_SIZE)
						.addComponent(button1, GroupLayout.PREFERRED_SIZE, 113, GroupLayout.PREFERRED_SIZE)
						.addComponent(button_point, GroupLayout.PREFERRED_SIZE, 113, GroupLayout.PREFERRED_SIZE))
					.addGap(38)
					.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
						.addComponent(button8, GroupLayout.PREFERRED_SIZE, 113, GroupLayout.PREFERRED_SIZE)
						.addComponent(button5, GroupLayout.PREFERRED_SIZE, 113, GroupLayout.PREFERRED_SIZE)
						.addComponent(button2, GroupLayout.PREFERRED_SIZE, 113, GroupLayout.PREFERRED_SIZE)
						.addComponent(button0, GroupLayout.PREFERRED_SIZE, 113, GroupLayout.PREFERRED_SIZE))
					.addGap(33)
					.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
						.addComponent(button9, GroupLayout.PREFERRED_SIZE, 113, GroupLayout.PREFERRED_SIZE)
						.addComponent(button6, GroupLayout.PREFERRED_SIZE, 113, GroupLayout.PREFERRED_SIZE)
						.addComponent(button3, GroupLayout.PREFERRED_SIZE, 113, GroupLayout.PREFERRED_SIZE)
						.addComponent(btnC, GroupLayout.PREFERRED_SIZE, 113, GroupLayout.PREFERRED_SIZE))
					.addGap(44)
					.addGroup(groupLayout.createParallelGroup(Alignment.TRAILING)
						.addGroup(groupLayout.createSequentialGroup()
							.addComponent(button_div, GroupLayout.PREFERRED_SIZE, 113, GroupLayout.PREFERRED_SIZE)
							.addPreferredGap(ComponentPlacement.RELATED, 65, Short.MAX_VALUE)
							.addComponent(button_result, GroupLayout.PREFERRED_SIZE, 92, GroupLayout.PREFERRED_SIZE))
						.addGroup(groupLayout.createSequentialGroup()
							.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
								.addComponent(button_sub, GroupLayout.PREFERRED_SIZE, 113, GroupLayout.PREFERRED_SIZE)
								.addComponent(button_add, GroupLayout.PREFERRED_SIZE, 113, GroupLayout.PREFERRED_SIZE)
								.addComponent(button_mul, GroupLayout.PREFERRED_SIZE, 113, GroupLayout.PREFERRED_SIZE))
							.addContainerGap(157, Short.MAX_VALUE))))
		);
		groupLayout.setVerticalGroup(
			groupLayout.createParallelGroup(Alignment.LEADING)
				.addGroup(groupLayout.createSequentialGroup()
					.addComponent(text1, GroupLayout.PREFERRED_SIZE, 68, GroupLayout.PREFERRED_SIZE)
					.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
						.addGroup(groupLayout.createSequentialGroup()
							.addPreferredGap(ComponentPlacement.RELATED)
							.addComponent(text2, GroupLayout.PREFERRED_SIZE, 62, GroupLayout.PREFERRED_SIZE))
						.addGroup(groupLayout.createSequentialGroup()
							.addGap(18)
							.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
								.addComponent(button_right, Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, 61, Short.MAX_VALUE)
								.addComponent(button_left, GroupLayout.PREFERRED_SIZE, 61, GroupLayout.PREFERRED_SIZE))))
					.addGap(34)
					.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
						.addComponent(button7, GroupLayout.PREFERRED_SIZE, 74, GroupLayout.PREFERRED_SIZE)
						.addComponent(button8, GroupLayout.PREFERRED_SIZE, 74, GroupLayout.PREFERRED_SIZE)
						.addComponent(button9, GroupLayout.PREFERRED_SIZE, 74, GroupLayout.PREFERRED_SIZE)
						.addComponent(button_add, GroupLayout.PREFERRED_SIZE, 74, GroupLayout.PREFERRED_SIZE))
					.addGap(21)
					.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
						.addGroup(groupLayout.createSequentialGroup()
							.addComponent(button_sub, GroupLayout.PREFERRED_SIZE, 74, GroupLayout.PREFERRED_SIZE)
							.addPreferredGap(ComponentPlacement.UNRELATED)
							.addComponent(button_mul, GroupLayout.PREFERRED_SIZE, 74, GroupLayout.PREFERRED_SIZE))
						.addGroup(groupLayout.createParallelGroup(Alignment.TRAILING, false)
							.addGroup(groupLayout.createSequentialGroup()
								.addComponent(button4, GroupLayout.PREFERRED_SIZE, 74, GroupLayout.PREFERRED_SIZE)
								.addPreferredGap(ComponentPlacement.UNRELATED)
								.addComponent(button1, GroupLayout.PREFERRED_SIZE, 74, GroupLayout.PREFERRED_SIZE)
								.addPreferredGap(ComponentPlacement.RELATED)
								.addGroup(groupLayout.createParallelGroup(Alignment.BASELINE)
									.addComponent(button_result, GroupLayout.PREFERRED_SIZE, 115, GroupLayout.PREFERRED_SIZE)
									.addComponent(button_point, GroupLayout.PREFERRED_SIZE, 74, GroupLayout.PREFERRED_SIZE)))
							.addGroup(groupLayout.createSequentialGroup()
								.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
									.addGroup(groupLayout.createSequentialGroup()
										.addComponent(button5, GroupLayout.PREFERRED_SIZE, 74, GroupLayout.PREFERRED_SIZE)
										.addPreferredGap(ComponentPlacement.UNRELATED)
										.addComponent(button2, GroupLayout.PREFERRED_SIZE, 74, GroupLayout.PREFERRED_SIZE))
									.addGroup(groupLayout.createSequentialGroup()
										.addComponent(button6, GroupLayout.PREFERRED_SIZE, 74, GroupLayout.PREFERRED_SIZE)
										.addPreferredGap(ComponentPlacement.UNRELATED)
										.addComponent(button3, GroupLayout.PREFERRED_SIZE, 74, GroupLayout.PREFERRED_SIZE)))
								.addPreferredGap(ComponentPlacement.RELATED, 27, Short.MAX_VALUE)
								.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
									.addGroup(groupLayout.createParallelGroup(Alignment.BASELINE)
										.addComponent(button0, GroupLayout.PREFERRED_SIZE, 74, GroupLayout.PREFERRED_SIZE)
										.addComponent(btnC, GroupLayout.PREFERRED_SIZE, 74, GroupLayout.PREFERRED_SIZE))
									.addComponent(button_div, GroupLayout.PREFERRED_SIZE, 74, GroupLayout.PREFERRED_SIZE))
								.addGap(23)))))
		);
		frame.getContentPane().setLayout(groupLayout);
	}
}


接下来是计算,放在了一个Result类中,代码都有详细注释,可参考这篇文章的文字解释https://blog.csdn.net/zzucsliang/article/details/25282249

/*Result.java*/
package caculator;
import java.util.Stack;
public class Result {
	    String str;
		Stack<String> s1=new Stack<String>();
	    Stack<String> s2=new Stack<String>();	    
	    public double result() {
	  	  //让每个字符先进栈
	  	  for(int i=0;i<str.length();i++) {
	  		  char c=str.charAt(i);
	  		  //数字则进栈
	  		  if(isNumber(c)==true) {
	  			  //数字前也是数字是就要与前面的数字一起存入
	  			  if(i!=0&&isNumber(str.charAt(i-1))==true)
	  			  {   
	  				  s1.pop();
	  				  s1.push(String.valueOf(str.charAt(i-1))+String.valueOf(c));
	  			  }
	  			  else s1.push(String.valueOf(c));
	  		  }
	  		  //不是数字
	  		  if(isNumber(c)==false) {
	  			 // System.out.println(111);
	  			  //字符栈为空,则直接进栈
	  			  if(s2.empty()) {
	  				  s2.push(String.valueOf(c));
	  			  }
	  			  else {
	  				  //左括号直接进栈
	  				  if(c=='(')
	  					  s2.push(String.valueOf(c));
	  				  //右括号则进行计算
	  				  if(c==')') {
	  					  double a1=Double.parseDouble(s1.pop());
	  					  double a2=Double.parseDouble(s1.pop());
	  					  String s=s2.pop();
	  					  s1.push(String.valueOf(Caculate_1(a2, a1, s)));
	  					  s2.pop();
	  				  }
	  				  //如果是加减号
	  				  if(c=='+'||c=='-') {
	  					  //栈顶符号优先级高则先进行优先级高的
	                          while(s2.peek().equals("*")||s2.peek().equals("/")||s2.peek().equals("-")||s2.peek().equals("+")) {
	                        	  //System.out.println(111);
	                      	  double a1=Double.parseDouble(s1.pop());
	                      	//  System.out.println(a1);
	      					  double a2=Double.parseDouble(s1.pop());
	      					 // System.out.println(a2);
	      					  String s=s2.pop();
	      					  s1.push(String.valueOf(Caculate_1(a2, a1, s)));
	      					  if(s2.empty())
	      						  break;
	                           }
	                      	 s2.push(String.valueOf(c));
	  				  }
	  				  //乘除则直接进栈
	  				 if(c=='*'||c=='/') {
	  					 s2.push(String.valueOf(c));
	  				 }
	  			  }
	  		  }
	  	  }
	  	  //按字符栈顺序执行
	  	 while(!s2.empty()) {
	  		      double a1=Double.parseDouble(s1.pop());
				  double a2=Double.parseDouble(s1.pop());
				  String s=s2.pop();
				  //double q=Caculate_1(a2, a1, s);
				  s1.push(String.valueOf(Caculate_1(a2, a1, s)));
	  	  }
	  	  return Double.parseDouble(s1.pop());	  
	    }
	    //判断是不是数字
	    public boolean isNumber(char c) {
	  	  if(!Character.isDigit(c)) 
	  		  return false;
	  	  else
	  	  return true;
	    }
	    //每一步的计算
	    public double Caculate_1(double a, double b,String c) {
	  	  if(c.equals("*"))
	         return a*b;
	  	  else if(c.equals("/"))
	  		 return a/b;
	  	  else if(c.equals("+"))
	  		  return a+b;
	  	  else if(c.equals("-"))
	  		   return a-b;
	  	  else
	  		  return 0;

	    }                
}

代码效果:java计算器
这个项目做图形界面不是关键,关键是对输入进去的式子进行运算,当然这代码还有好多可以优化的,比如添加小数,或者是输入不规范格式时会出现报错等。

  • 1
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,下面是一个用Java实现的四则运算计算器代码: ``` import java.util.Scanner; public class Calculator { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入第一个数字:"); double num1 = scanner.nextDouble(); System.out.print("请输入第二个数字:"); double num2 = scanner.nextDouble(); System.out.print("请输入运算符(+、-、*、/):"); char operator = scanner.next().charAt(0); double result; switch (operator) { case '+': result = num1 + num2; break; case '-': result = num1 - num2; break; case '*': result = num1 * num2; break; case '/': result = num1 / num2; break; default: System.out.println("运算符不正确!"); return; } System.out.println("结果为:" + result); } } ``` 该代码使用`Scanner`类来读取用户输入,使用switch语句来判断并执行相应的运算。最后,它会输出结果。 ### 回答2: 四则运算计算器是一个常见的计算器类型,可以进行加减乘除四种基本数学运算。可以使用Java语言编一个简单四则运算计算器。 首先,我们需要设计一个用户界面来接收用户输入。可以使用Java的Swing库来创建一个简单的GUI界面,包含数字按钮、操作符按钮和等号按钮。用户可以点击按钮来输入数字和操作符,并点击等号按钮来计算结果。 接下来,我们需要编计算逻辑。可以创建一个Calculator类,其中包含一个calculate方法来执行计算。在calculate方法中,首先需要判断用户输入的表达式是否合法。可以使用正则表达式来验证用户输入的表达式是否符合四则运算规则,如数字与操作符的顺序等。 然后,我们可以使用栈来实现计算逻辑。将用户输入的表达式转换为后缀表达式,然后使用栈来计算后缀表达式的值。在计算过程中,遇到操作符时从栈中弹出两个操作数进行计算,并将计算结果压入栈中,直到计算完整个表达式。 最后,我们可以将计算结果显示在用户界面上。在GUI界面中,可以使用一个文本框来显示用户输入和计算结果。 总结:使用Java一个四则运算计算器需要设计一个用户界面来接收用户输入,并包含计算逻辑来验证用户输入和进行计算。最后,将计算结果显示在界面上。 ### 回答3: 四则运算计算器是一个简单计算器,可以进行加、减、乘、除等基本的数学运算。以下是用Java一个四则运算计算器的示例代码: ```java import java.util.Scanner; public class Calculator { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入第一个数字:"); double num1 = scanner.nextDouble(); System.out.println("请输入运算符(+、-、*、/):"); String operator = scanner.next(); System.out.println("请输入第二个数字:"); double num2 = scanner.nextDouble(); double result = 0; switch(operator){ case "+": result = num1 + num2; break; case "-": result = num1 - num2; break; case "*": result = num1 * num2; break; case "/": if(num2 != 0){ result = num1 / num2; } else { System.out.println("除数不能为零!"); return; } break; default: System.out.println("无效的运算符!"); return; } System.out.println("结果为:" + result); } } ``` 这个计算器程序首先使用`Scanner`类从用户输入中获取第一个数字、运算符和第二个数字等输入信息。然后使用`switch`语句根据运算符执行相应的算术运算,并将结果保存在`result`变量中。最后,将结果输出给用户。 注意,上述代码并未添加错误处理,当用户输入错误的运算符或除数为零时,程序会直接返回。实际情况下,需要更完善的错误处理机制来提升程序的鲁棒性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值