有点小意思~

package ok;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField; /**
* @author Jifahu 自制小白计算器,目前不支持键盘输入,(键盘太麻烦了有木有……) 但是良心支持了多个输入,自动判定优先级 里面有一些小彩蛋哦~
*/
public class Calc extends JFrame implements ActionListener { private String[] MainKey = { "7", "8", "9", "4", "5", "6", "1", "2", "3",
"0", ".", " " };
private String[] Cmd1 = { "+", "-", "*", "/" };
private String[] Cmd2 = { "←", "C", " ", "=" };
private JButton[] MK = new JButton[MainKey.length];
private JButton[] C1 = new JButton[Cmd1.length];
private JButton[] C2 = new JButton[Cmd2.length];
private JTextField ans = new JTextField("");
boolean judge = false; public Calc() {
setTitle("小白计算器");
SetLayout();
setResizable(false);
setVisible(true);
pack();
} void SetLayout() {
JPanel J_ans = new JPanel();
J_ans.setLayout(new GridLayout());
ans.setHorizontalAlignment(ans.RIGHT);
ans.setEditable(false);
ans.setBackground(Color.white);
J_ans.add(ans); JPanel J_MK = new JPanel();
J_MK.setLayout(new GridLayout(4, 3, 2, 2));
for (int i = 0; i < MainKey.length; i++) {
MK[i] = new JButton(MainKey[i]);
MK[i].addActionListener(this);
J_MK.add(MK[i]);
} JPanel J_C1 = new JPanel();
J_C1.setLayout(new GridLayout(4, 1, 2, 2));
for (int i = 0; i < Cmd1.length; i++) {
C1[i] = new JButton(Cmd1[i]);
C1[i].addActionListener(this);
J_C1.add(C1[i]);
} JPanel J_C2 = new JPanel();
J_C2.setLayout(new GridLayout(4, 1, 2, 2));
for (int i = 0; i < Cmd2.length; i++) {
C2[i] = new JButton(Cmd2[i]);
C2[i].addActionListener(this);
J_C2.add(C2[i]);
}
getContentPane().setLayout(new BorderLayout(2, 2));
getContentPane().add("West", J_MK);
getContentPane().add("Center", J_C1);
getContentPane().add("East", J_C2);
getContentPane().add("North", J_ans);
setLocation(600, 300);
} public String Get_ans(String now) {
int len = now.length();
int pos = 0, point, k = 0, Dtot = 0;
String tmp;
double[] Dnum = new double[30];
String op = "";
for (int i = 0; i <= len; i++) {
tmp = "";
point = 0;
if (i == len || "+-*/".indexOf(now.charAt(i)) >= 0) {
if (i != len) {
k++;
op += now.charAt(i);
}
for (int j = i - 1; j >= pos; j--) {
if (now.charAt(j) == '.')
point++;
}
tmp = now.substring(pos, i);
if (point >= 2)
return tmp + " 是什么鬼";
Dnum[Dtot++] = Double.valueOf(tmp);
pos = i + 1;
}
}
if (k == 0)
return "就一个数,你还让我算,你有多笨";
for (int i = 0; i < k; i++) {
if (op.charAt(i) == '*') {
Dnum[i + 1] *= Dnum[i];
Dnum[i] = 0;
} else if (op.charAt(i) == '/') {
if (Dnum[i + 1] == 0)
return "除数不能为0,你肯定是故意的";
Dnum[i + 1] = Dnum[i] / Dnum[i + 1];
Dnum[i] = 0;
}
}
String nop = "";
char Lop = '+';
for(int i = 0;i < k;i++){
if(op.charAt(i)=='+') Lop = '+';
else if(op.charAt(i)=='-') Lop = '-';
if(op.charAt(i)=='*'||op.charAt(i)=='/') nop += Lop;
else nop += op.charAt(i);
}
double res = Dnum[0];
for (int i = 0; i < k; i++) {
if(nop.charAt(i)=='-') res -= Dnum[i+1];
else res += Dnum[i+1];
}
return String.valueOf(res);
} public void actionPerformed(ActionEvent ae) {
String now = ans.getText();
String s = ae.getActionCommand();
int len = now.length();
if(judge == true){
judge = false;
ans.setText("");
}
else if (s.equals("C")){
ans.setText("");
judge = false;
}
else if (s.equals("←")) {
if (len > 0) {
now = now.substring(0, len - 1);
ans.setText(now);
}
} else if (s.equals(" ") || len >= 30) { } else if ("+-*/".indexOf(s) >= 0) {
if (len != 0 && "+-*/.".indexOf(now.charAt(len - 1)) < 0) {
ans.setText(now + s);
}
} else if (s.equals("=")) {
if (len != 0 && "+-*/.".indexOf(now.charAt(len - 1)) < 0) {
ans.setText(Get_ans(now));
judge = true;
}
} else if (s.equals(".")) {
if (len != 0 && "1234567890".indexOf(now.charAt(len - 1)) >= 0)
ans.setText(now + s);
} else
ans.setText(now + s);
} public static void main(String args[]) {
Calc c = new Calc();
}
}

使用java写一个小白计算器的更多相关文章

  1. 用JAVA写一个函数,功能例如以下: 随意给定一组数, 找出随意数相加之后的结果为35(随意设定)的情况

    用JAVA写一个函数.功能例如以下:随意给定一组数,比如{12,60,-8,99,15,35,17,18},找出随意数相加之后的结果为35(随意设定)的情况. 能够递归算法来解: package te ...

  2. 五:用JAVA写一个阿里云VPC Open API调用程序

    用JAVA写一个阿里云VPC Open API调用程序 摘要:用JAVA拼出来Open API的URL 引言 VPC提供了丰富的API接口,让网络工程是可以通过API调用的方式管理网络资源.用程序和软 ...

  3. 用java写一个servlet,可以将放在tomcat项目根目录下的文件进行下载

    用java写一个servlet,可以将放在tomcat项目根目录下的文件进行下载,将一个完整的项目进行展示,主要有以下几个部分: 1.servlet部分   Export 2.工具类:TxtFileU ...

  4. 用JAVA写一个多线程程序,写四个线程,其中二个对一个变量加1,另外二个对一个变量减1

    package com.ljn.base; /** * @author lijinnan * @date:2013-9-12 上午9:55:32 */ public class IncDecThrea ...

  5. 使用JAVA写一个简单的日历

    JAVA写一个简单的日历import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateF ...

  6. java 写一个"HelloJavaWorld你好世界"输出到操作系统文件Hello.txt文件中

    package com.beiwo.homework; import java.io.File; import java.io.FileOutputStream; import java.io.IOE ...

  7. Java写一个简单学生管理系统

    其实作为一名Java的程序猿,无论你是初学也好,大神也罢,学生管理系统一直都是一个非常好的例子,初学者主要是用数组.List等等来写出一个简易的学生管理系统,二.牛逼一点的大神则用数据库+swing来 ...

  8. 用java写一个用户登陆界面

    一.课堂测试源代码及其结果截图 用java的swing写一个用户登录界面,采用网格布局.源代码如下: /** * */package LiuLijia; import java.awt.CardLay ...

  9. 《用Java写一个通用的服务器程序》01 综述

    最近一两年用C++写了好几个基于TCP通信类型程序,都是写一个小型的服务器,监听请求,解析自定义的协议,处理请求,返回结果.每次写新程序时都把老代码拿来,修改一下协议解析部分和业务处理部分,然后就一个 ...

随机推荐

  1. JSP引擎的工作原理

    JSP运行环境: 执行JSP代码需要在服务器上安装JSP引擎,比较常见的引擎有WebLogic和Tomcat.把这些支持JSP的web服务器配置好后.就可以再客户端通过浏览器来访问JSP页面了.默认端 ...

  2. 获取Exception的详细信息

    转自:http://blog.csdn.net/long95wang/article/details/8089489 方法一: public static String getExceptionAll ...

  3. 百度地图API的自动定位和搜索功能(移动端)

    近期有个项目涉及到百度地图API,要求做到自动定位和搜索功能.煞费苦心的研究半天,终于能将两个功能合二为一,现将代码贴出来分享给大家,希望你们的砖搬得又快又好.注释不多,具体请参照:http://lb ...

  4. MVC源码解析 - 配置注册 / 动态注册 HttpModule

    本来这一篇, 是要继续 Pipeline 的, 但是在 Pipeline之前, 我看到了InitModules()方法, 所以决定, 在中间穿插一篇进来. 这一篇来讲一下 IHttpModule 的加 ...

  5. JS 脚本应该放在页面哪个位置 head body foot

    我们平时在页面上写JS 是放在头部<head>中呢 还是放到body 最下面 能更优化? 查了一番资料,推荐 放在页面底部如: <html> <head> < ...

  6. KB2533623 下载

    服务器上要部署.NET Core 的环境, 先要在服务器上安装Core SDK.直达连接 下载安装一切顺利: 下面开始检验是否正确安装了↓ 运行→cmd→dotnet 结果报错↓ Failed to ...

  7. jmeter压力测试的简单实例+badboy脚本录制(一个简单的网页用户登录测试的结果)

    JMeter的安装:在网上下载,在下载后的zip解压后,在bin目录下找到JMeter.bat文件,双击就可以运行JMeter. http://jmeter.apache.org/ 在使用jmeter ...

  8. 在Windows上创建同样的Linux操作环境

    在之前的文章中,介绍了我在GNU/Linux图形界面环境下所使用的工具集合.其基本目的是在保证占用最少系统资源的条件下,将电脑操作效率推向极致.这样的工具组合尤如瑞士军刀一般,简洁.高效.功能全面.与 ...

  9. python3数据结构

    列表 list.append(x) 把一个元素添加到列表的结尾,相当于a[len(a):]=[x] list.extend(L) 将一个给定列表中的所有元素都添加到另一个列表中,相当于a[(len): ...

  10. JDBC连接sql server数据库操作

    1.首先,先创建一个连接数据库的工具类: package gu.db.util; import java.sql.Connection; import java.sql.DriverManager; ...