java大作业计算器_java大作业计算器

本文记录了一次Java大作业——制作计算器的过程。通过使用网格布局管理组件以适应界面拉伸,解决文本框过大问题。同时,为处理运算符优先级,设计了逻辑判断,先处理已有运算符。然而,后来得知老师更新了要求,需考虑运算符优先级,作者计划后续研究。
摘要由CSDN通过智能技术生成

java大作业是做一个计算器,通过实验报告要求来看,并不难。

68f724bad5a33d9a9f6bd2ca7369ecb7.png

在实现的过程中,我的思路就是输入一串字符串,通过判断有什么运算符,再去截取运算符前后的字符串并转化为浮点型。从而进行运算。在写的过程中主要有两个小问题:

1.由于试验要求布局在拉伸放缩的过程中各组件同步拉伸放缩,只能用网格布局。于是我添加文本框到一个面板,又把一系列按钮添加到一个面板,都分别用了网格布局。最后又做一个两行一列的网格布局。如下,但是…给老师看了之后老师说文本框太大,不好看。

a9a1d541a3835220df5978cfbaad7e79.png

于是我就又想了其他布局,但是拉伸的时候不随着界面大小而动,,更难看。最后想出来一个绝妙的方法^ω^,把每行按钮添加到一个面板里,都做成一个一行四列的网格布局。这样一共是五个网格布局,再加上文本框的一个,一共六个,对这六个面板再做成六行一列的网格布局。便解决了这个问题。

93282a77740603dce607d3a97f830d27.png

2.一开始我的想法只是实现两个数的运算,不然一个字符串里出现多个运算符不好截取。但是老师说让计算机点第二个运算符时就算出前面字符串的值。虽然这样不符合运算符的优先级运算,不过老师说先这样做。我就在运算符的点击事件里加了一个判断,如果前面的字符串里已经有了运算符就先处理前面,没有就代表这是第一个运算符,还是直接显示到屏幕上。也算是解决了问题。不过今天突然又听别的班的同学说老师改了要求,,必须判断优先级。那,就等我有空的时候再研究吧π_π,明天就要数据结构月考了,还是先看看它吧。。

b94ff665d63beb2abb0bfed831113e78.png          

5b23536352b4de8aeba8d1a0bb00d3b0.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
java 大作业 科学计算器 menu切换普通与科学计算器 部分代码: class MyKey extends KeyAdapter { public void keyPressed(KeyEvent e) { char c = e.getKeyChar(); System.out.print(c); boolean bFlag = false; switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if(IfResult){ tf.setText(""); IfResult = false; } tf.setText(tf.getText().trim() + c); bFlag = true; break; case '.': if(tf.getText().trim().indexOf(".") == -1){ tf.setText(tf.getText() + "."); } bFlag = true; break; case '_': if(Double.parseDouble(tf.getText()) > 0){ if(tf.getText().length() > 1){ tf.setText(tf.getText().substring(0, tf.getText().length() - 1)); }else{ tf.setText("0"); IfResult = true; } }else{ if(tf.getText().length() > 2){ tf.setText(tf.getText().substring(0, tf.getText().length() - 1)); }else{ tf.setText("0"); IfResult = true; } } bFlag = true; break; case '+': if(flag){ IfResult = false; } if(IfResult){ oper = "+"; }else{ getResult(Double.parseDouble(tf.getText())); oper = "+"; IfResult = true; } bFlag = true; break; case '-': if(flag){ IfResult = false; } if(IfResult){ oper = "-"; }else{ getResult(Double.parseDouble(tf.getText())); oper = "-"; IfResult = true; } bFlag = true; break; case '*': if(flag){ IfResult = false; } if(IfResult){ oper = "*"; }else{ getResult(Double.parseDouble(tf.getText())); oper = "*"; IfResult = true; } bFlag = true; break; case '/': if(flag){ IfResult = false; } if(IfResult){ oper = "/"; }else{ getResult(Double.parseDouble(tf.getText())); oper = "/"; IfResult = true; } bFlag = true; break; case '=': if(flag){ IfResult = false; } if(IfResult){ oper = "="; }else{ getResult(Double.parseDouble(tf.getText())); oper = "="; IfResult = true; } bFlag = true; break; } if(bFlag && tf.getText().equals("0")){ tf.setText("0"); IfResult = true; flag = true; } } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值