我只看了public void actionPerformed(ActionEvent e)上面的一段,发现的问题是:
1、Frame f和Panel p分别添加了10个Button,重复,应该只在Panel上面添加;
2、在添加Button的时候,你的代码如下:
for (int i=0;i<16;i++){
padd(new Button(s[i]));
new Button(s[i])addActionListener(this);
}
这样的话,你在Panel上面添加的Button是没有注册事件监听的。
应为这样:
for (int i=0;i<16;i++){
Button btn = new Button(s[i]);
btnaddActionListener(this);
padd(btn);
}
3、代码结构混乱,不易阅读,建议把变量声明放到开头,添加注释。
/
四则运算表达式计算
@author penli
/
public class Arithmetic {
public static void main(String args[]){
Systemoutprintln(arithmetic("22+((3+4)2-22)/232"));
}
public static double arithmetic(String exp){
String result = parseExp(exp)replaceAll("[\\[\\]]", "");
return DoubleparseDouble(result);
}
/
解析计算四则运算表达式,例:2+((3+4)2-22)/23
@param expression
@return
/
public static String parseExp(String expression){
//String numberReg="^((!0)\\d+(\\\\d+(<!0)))|(0\\\\d+(<!0))$";
expression=expressionreplaceAll("\\s+", "")replaceAll("^\\((+)\\)$", "$1");
String checkExp="\\d";
String minExp="^((\\d+(\\\\d+))|(\\[\\-\\d+(\\\\d+)\\]))[\\+\\-\\\\/]((\\d+(\\\\d+))|(\\[\\-\\d+(\\\\d+)\\]))$";
//最小表达式计算
if(expressionmatches(minExp)){
String result=calculate(expression);
return DoubleparseDouble(result)>=0result:"["+result+"]";
}
//计算不带括号的四则运算
String noParentheses="^[^\\(\\)]+$";
String priorOperatorExp="(((\\d+(\\\\d+))|(\\[\\-\\d+(\\\\d+)\\]))[\\\\/]((\\d+(\\\\d+))|(\\[\\-\\d+(\\\\d+)\\])))";
String operatorExp="(((\\d+(\\\\d+))|(\\[\\-\\d+(\\\\d+)\\]))[\\+\\-]((\\d+(\\\\d+))|(\\[\\-\\d+(\\\\d+)\\])))";
if(expressionmatches(noParentheses)){
Pattern patt=Patterncompile(priorOperatorExp);
Matcher mat=pattmatcher(expression);
if(matfind()){
String tempMinExp=matgroup();
expression=expressionreplaceFirst(priorOperatorExp, parseExp(tempMinExp));
}else{
patt=Patterncompile(operatorExp);
mat=pattmatcher(expression);
if(matfind()){
String tempMinExp=matgroup();
expression=expressionreplaceFirst(operatorExp, parseExp(tempMinExp));
}
}
return parseExp(expression);
}
//计算带括号的四则运算
String minParentheses="\\([^\\(\\)]+\\)";
Pattern patt=Patterncompile(minParentheses);
Matcher mat=pattmatcher(expression);
if(matfind()){
String tempMinExp=matgroup();
expression=expressionreplaceFirst(minParentheses, parseExp(tempMinExp));
}
return parseExp(expression);
}
/
计算最小单位四则运算表达式(两个数字)
@param exp
@return
/
public static String calculate(String exp){
exp=expreplaceAll("[\\[\\]]", "");
String number[]=expreplaceFirst("(\\d)[\\+\\-\\\\/]", "$1,")split(",");
BigDecimal number1=new BigDecimal(number[0]);
BigDecimal number2=new BigDecimal(number[1]);
BigDecimal result=null;
String operator=expreplaceFirst("^\\d([\\+\\-\\\\/])+$", "$1");
if("+"equals(operator)){
result=number1add(number2);
}else if("-"equals(operator)){
result=number1subtract(number2);
}else if(""equals(operator)){
result=number1multiply(number2);
}else if("/"equals(operator)){
result=number1divide(number2);
}
return result!=nullresulttoString():null;
}
}
看看对你有没有帮助。不懂得继续探讨
import javaawt;
import javaawtevent;
import javaxswing;
import javautilVector;
public class Tuo
{
String str1="0"; //运算数1 初值一定为0 为了程序的安全
String str2="0"; //运算数2
String fh="+"; //运算符
String jg="";//结果
//状态开关 重要
int k1=1;//开关1 用于选择输入方向 将要写入str1或 str2
int k2=1;//开关2 符号键 次数 k2>1说明进行的是2+3-9+8 这样的多符号运算
int k3=1;//开关3 str1 是否可以被清0 ==1时可以 !=1时不能被清0
int k4=1;//开关4 str2 同上
int k5=1;//开关5 控制小数点可否被录入 ==1时可以 !=1 输入的小数点被丢掉
JButton jicunqi; //寄存器 记录 是否连续按下符号键
Vector vt=new Vector(20,10);
JFrame frame=new JFrame("JMS邦---计算器");
JTextField jg_TextField=new JTextField(jg,20);//20列
JButton clear_Button=new JButton("清除");
JButton button0=new JButton("0");
//1-9
JButton button_Dian=new JButton("");
JButton button_jia=new JButton("+");
JButton button_jian=new JButton("-");
JButton button_cheng=new JButton("");
JButton button_chu=new JButton("/");
JButton button_den=new JButton("=");
////////////////////////////////////////////////////////////////////////
public static void main(String[] args)
{
Tuo tuo=new Tuo();
}
/////////////////////////////////////////////////////////////////////////
Tuo()
{
button0setMnemonic(KeyEventVK_0);//等效键
//其它 等效键省略
jg_TextFieldsetHorizontalAlignment(JTextFieldRIGHT );//文本框 右对齐
JPanel pan=new JPanel();
pansetLayout(new GridLayout(4,4,5,5));//四行四列 边距为5像素
panadd(button7);
// 其它 对象省略
pansetBorder(BorderFactorycreateEmptyBorder(5,5,5,5));//pan对象的边距
JPanel pan2=new JPanel();
pan2add(jg_TextField);
JPanel pan3=new JPanel(); //为什么要 多此一句呢? 因为我不会设置 按钮的大小
pan3setLayout(new FlowLayout());
pan3add(clear_Button);
//clear_ButtonsetSize(10,10);//设置清零按钮的大小 吗的 不好使 !!
framesetLocation(300, 200); //主窗口 出现在位置
framesetResizable(false); //不能调大小
framegetContentPane()setLayout(new BorderLayout());
framegetContentPane()add(pan2,BorderLayoutNORTH);
framegetContentPane()add(pan,BorderLayoutCENTER);
framegetContentPane()add(pan3,BorderLayoutSOUTH);
framepack();
framesetVisible(true);
//以上是 控件 和 布局
//下面是事件处理 程 序
//--------------- 数 字 键 ----------------
class JianTing implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
String ss=((JButton)egetSource())getText();
jicunqi=(JButton)egetSource();
vtadd(jicunqi);
if (k1==1)
{
if(k3==1)
{
str1="";
k5=1;//还原开关k5状态
}
str1=str1+ss;
//k2=1;
k3=k3+1;
//Systemoutprintln(str1);
jg_TextFieldsetText(str1);//显示
}
else if(k1==2)
{
if (k4==1)
{
str2="";
k5=1; //还原开关k5状态
}
str2=str2+ss;
//k2=2;
k4=k4+1;
///////////////测试////////////////
jg_TextFieldsetText(str2);
}
}
}
//--------符 号-----------
class JianTing_fh implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
String ss2=((JButton)egetSource())getText();
jicunqi=(JButton)egetSource();
vtadd(jicunqi);
if(k2==1)
{
k1=2;//开关 k1 为1时,向数1写 为2时,向数2写
k5=1;
fh=ss2;
k2=k2+1;//按符号键的次数
}
else
{
int a=vtsize();
JButton c=(JButton)vtget(a-2);
if(!(cgetText()equals("+"))&&!(cgetText()equals("-"))&&!(cgetText()equals(""))&&!(cgetText()equals("/")))
//if(!(vtget(a-2)getText()equals("-"))||!(vtget(a-2)getText()equals("+"))||!(vtget(a-2)getText()equals(""))||!(vtget(a-2)getText()equals("/")))
{ yuns();
str1=jg;
k1=2;//开关 k1 为1时,向数1写 为2时,向数2写
k5=1;
k4=1;
fh=ss2;
} k2=k2+1;
}
}
}
//--------清除-------
class JianTing_clear implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
jicunqi=(JButton)egetSource();
vtadd(jicunqi);
k5=1;
k2=1;
k1=1;
k3=1;
k4=1;
str1="0";
str2="0";
fh="";
jg="";
jg_TextFieldsetText(jg);
vtclear();
}
}
//----------------等 于 ---------------------
class JianTing_den implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
jicunqi=(JButton)egetSource();
vtadd(jicunqi);
yuns();
k1=1; //还原开关k1状态
//str1=jg;
k2=1;
k3=1;//还原开关k3状态
k4=1; //还原开关k4状态
str1=jg; //为7+5=12 +5=17 这种计算做准备
}
}
//----------------小数点 ---------------------
class JianTing_xiaos implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
jicunqi=(JButton)egetSource();
vtadd(jicunqi);
if(k5==1)
{
String ss2=((JButton)egetSource())getText();
if (k1==1)
{
if(k3==1)
{
str1="";
k5=1; //还原开关k5状态
}
str1=str1+ss2;
//k2=1;
k3=k3+1;
//Systemoutprintln(str1);
jg_TextFieldsetText(str1);//显示
}
else if(k1==2)
{
if (k4==1)
{
str2="";
k5=1; //还原开关k5状态
}
str2=str2+ss2;
//k2=2;
k4=k4+1;
///////////////测试////////////////
jg_TextFieldsetText(str2);
}
}
k5=k5+1; //
}
}
//注册 监听器
JianTing_den jt_den=new JianTing_den();
JianTing jt= new JianTing();//临听数字键
JianTing_fh jt_fh= new JianTing_fh();//临听符号键
JianTing_clear jt_c=new JianTing_clear(); //清除键
JianTing_xiaos jt_xs=new JianTing_xiaos();//小数点键
button7addActionListener(jt);
//其它 按键的监听省略,
//关闭事件处理程序
frameaddWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
Systemexit(0);
}
}) ;
}
//---------------计 算------------------
public void yuns()
{
double a2;//运算数1
double b2;//运算数2
String c=fh;// 运算符
double jg2=0 ;//结果
if (cequals(""))
{
//Systemoutprintln("请输入运算符");
jg_TextFieldsetText("请输入运算符");
}
else
{
Systemoutprintln("str1:"+str1);//调试时 使 用
Systemoutprintln("str2:"+str2);//调试时 使 用
Systemoutprintln("运算符:"+fh);//调试时 使 用
if (str1equals("")) //字符串 "" 转换成double型数据时 会出错 所以手工转
str1="00";
if (str2equals(""))
str2="00";
a2=DoublevalueOf(str1)doubleValue();
b2=DoublevalueOf(str2)doubleValue();
Systemoutprintln("double型的a2:"+a2); //调试时 使 用
Systemoutprintln("double型的b2:"+b2); //调试时 使 用
if (cequals("+"))
{
jg2=a2+b2;
}
if (cequals("-"))
{
jg2=a2-b2;
}
if (cequals(""))
{
jg2=a2b2;
}
if (cequals("/"))
{
if(b2==0)
{
jg2=0;
}
else
{
jg2=a2/b2;
}
}
Systemoutprintln("double型a2"+fh+"b2结果:"+jg2);
Systemoutprintln();
jg=((new Double(jg2))toString());
jg_TextFieldsetText(jg);
}
}
}
public static void main(String[] args){
String firstString="This is";
String secondString="This is";
if(firstString==null && secondString==null){
Systemoutprintln("①firstString 与 secondString 相等");
}else if(firstString!=null && firstStringequals(secondString)){
Systemoutprintln("①firstString 与 secondString 相等");
}else{
Systemoutprintln("①firstString 与 secondString 不相等");
}
String str = firstString + "his father";
Systemoutprintln("②"+str);
Systemoutprintln("③"+strreplaceAll("i", "z"));
}
public class TestStar {
public static void main(String[] args) {
String star = "";
for (int i = 0; i < 5; i++) {
if (i == 0) {
Systemoutprint(" " + star);
Systemoutprintln();
}
if (i == 1) {
for (int z = 0; z < 4; z++) {
Systemoutprint(" " + star);
}
Systemoutprintln();
}
if (i == 2) {
Systemoutprint(" ");
for (int x = 0; x < 3; x++) {
Systemoutprint(" " + star);
}
Systemoutprintln();
}
if (i == 3) {
for (int y = 0; y < 2; y++) {
Systemoutprint(" " + star + " ");
}
}
}
}
}
是好使的 但是我没找到画五角星有什么规律(五角星好象不是正规图形吧?)如果还有什么要求的话 补充问题(如果是用填充所有的东西 不包括 “ ”的话 我可以重新再给你写一个)
import javaxswing;
import javaawt;
import javaawtevent;
public class Calculator extends JFrame implements ActionListener
{
private boolean dotExist, operated, equaled; // 帮助运算的布尔变量
private double storedNumber; // 目前的结果
private char lastOperator; // 表示上一运算符
private JTextField operation; // 结果栏
private JButton dot, plus, minus, multi, div, sqrt, equal, changePN, clear; // 运算符
private JButton[] numbers; // 数字
// 构造者
public Calculator()
{
setTitle("Calculator");
// 初始化变量
dotExist = false; // 表示当前的数是否有小数点
operated = false; // 表示任意运算符是否被按下
equaled = false; // 表示等号是否被按下
storedNumber = 0;
lastOperator = '';
// 初始化窗口变量
operation = new JTextField("0");
operationsetEditable(false);
numbers = new JButton[10];
for (int i = 0; i < 10; i++)
numbers[i] = new JButton("" + i);
dot = new JButton("");
plus = new JButton("+");
minus = new JButton("-");
multi = new JButton("");
div = new JButton("/");
sqrt = new JButton("√");
equal = new JButton("=");
changePN = new JButton("±");
clear = new JButton("AC");
// 将窗口物体放入窗口
GridBagLayout layout = new GridBagLayout();
getContentPane()setLayout(layout);
addComponent(layout, operation, 0, 0, 4, 1);
addComponent(layout, numbers[1], 1, 0, 1, 1);
addComponent(layout, numbers[2], 1, 1, 1, 1);
addComponent(layout, numbers[3], 1, 2, 1, 1);
addComponent(layout, numbers[4], 2, 0, 1, 1);
addComponent(layout, numbers[5], 2, 1, 1, 1);
addComponent(layout, numbers[6], 2, 2, 1, 1);
addComponent(layout, numbers[7], 3, 0, 1, 1);
addComponent(layout, numbers[8], 3, 1, 1, 1);
addComponent(layout, numbers[9], 3, 2, 1, 1);
addComponent(layout, dot, 4, 0, 1, 1);
addComponent(layout, numbers[0], 4, 1, 1, 1);
addComponent(layout, sqrt, 4, 2, 1, 1);
addComponent(layout, plus, 1, 3, 1, 1);
addComponent(layout, minus, 2, 3, 1, 1);
addComponent(layout, multi, 3, 3, 1, 1);
addComponent(layout, div, 4, 3, 1, 1);
addComponent(layout, equal, 5, 0, 2, 1);
addComponent(layout, changePN, 5, 2, 1, 1);
addComponent(layout, clear, 5, 3, 1, 1);
}
// 对按钮进行反应的方法
public void actionPerformed(ActionEvent e)
{
JButton btn = (JButton)egetSource();
if (btn == clear)
{
operationsetText("0");
dotExist = false;
storedNumber = 0;
lastOperator = '';
}
else if (btn == equal)
{
operate('=');
equaled = true;
}
else if (btn == plus)
{
operate('+');
equaled = false;
}
else if (btn == minus)
{
operate('-');
equaled = false;
}
else if (btn == multi)
{
operate('');
equaled = false;
}
else if (btn == div)
{
operate('/');
equaled = false;
}
else if (btn == changePN)
{
operate('p');
operate('=');
equaled = true;
}
else if (btn == sqrt)
{
operate('s');
operate('=');
equaled = true;
}
else
{
if (equaled)
storedNumber = 0;
for (int i = 0; i < 10; i++)
if (btn == numbers[i])
{
if (operationgetText()equals("0"))
operationsetText("" + i);
else if(! operated)
operationsetText(operationgetText() + i);
else
{
operationsetText("" + i);
operated = false;
}
}
if (btn == dot && ! dotExist)
{
operationsetText(operationgetText() + "");
dotExist = true;
}
}
}
// 进行运算的方法
private void operate(char operator)
{
double currentNumber = DoublevalueOf(operationgetText())doubleValue();
if (lastOperator == '')
storedNumber = currentNumber;
else if (lastOperator == '+')
storedNumber += currentNumber;
else if (lastOperator == '-')
storedNumber -= currentNumber;
else if (lastOperator == '')
storedNumber = currentNumber;
else if (lastOperator == '/')
storedNumber /= currentNumber;
else if (lastOperator == 'p')
storedNumber = -1;
else if (lastOperator == 's')
storedNumber = Mathsqrt(currentNumber);
else if (lastOperator == '=' && equaled)
storedNumber = currentNumber;
operationsetText("" + storedNumber);
operated = true;
lastOperator = operator;
}
// 快捷使用GridBagLayout的方法
private void addComponent(GridBagLayout layout, Component component, int row, int col, int width, int height)
{
GridBagConstraints constraints = new GridBagConstraints();
constraintsfill = GridBagConstraintsBOTH;
constraintsinsets = new Insets(10, 2, 10, 2);
constraintsweightx = 100;
constraintsweighty = 100;
constraintsgridx = col;
constraintsgridy = row;
constraintsgridwidth = width;
constraintsgridheight = height;
layoutsetConstraints(component, constraints);
if (component instanceof JButton)
((JButton)component)addActionListener(this);
getContentPane()add(component);
}
// 主方法初始化并显示窗口
public static void main(String[] args)
{
Calculator calc = new Calculator();
calcsetSize(290, 400);
calcsetVisible(true);
}
}
1、新建一个易语言的Windows窗口程序。
2、举一个简单的例子,做一个加法计算器。添加三个编辑框、两个文本和一个按钮,界面如下:
3、此时会用到两个局部变量,定义为变量1、变量2,按CTRL+Ld出局部变量表(或点菜单栏上的插入,选择局部变量),如图。
4、点击变量名下面的框,输入变量1,点击类型,按下空格键,d出如下菜单:
选择小数型。同样,添加变量2。
5、同样,全局变量也一样,只不过快捷键为CTRL+G,注意的是,要在窗口程序集里面插入变量。
以上就是关于求JAVA的高手帮忙看看我的程序 ,程序写的是一个计算机程序,实现简单的运算全部的内容,包括:求JAVA的高手帮忙看看我的程序 ,程序写的是一个计算机程序,实现简单的运算、用JAVA编写一个计算机、急求java计算器程序,只要加减乘除,三个文本框和四个按扭就行,能多简单多简单等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)