求JAVA的高手帮忙看看我的程序 ,程序写的是一个计算机程序,实现简单的运算

求JAVA的高手帮忙看看我的程序 ,程序写的是一个计算机程序,实现简单的运算,第1张

我只看了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计算器程序,只要加减乘除,三个文本框和四个按扭就行,能多简单多简单等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9316114.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存