科学计算器JAVA-

上传人:桔**** 文档编号:573204947 上传时间:2024-08-14 格式:PDF 页数:29 大小:724.71KB
返回 下载 相关 举报
科学计算器JAVA-_第1页
第1页 / 共29页
科学计算器JAVA-_第2页
第2页 / 共29页
科学计算器JAVA-_第3页
第3页 / 共29页
科学计算器JAVA-_第4页
第4页 / 共29页
科学计算器JAVA-_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《科学计算器JAVA-》由会员分享,可在线阅读,更多相关《科学计算器JAVA-(29页珍藏版)》请在金锄头文库上搜索。

1、目录一、综合训练目的与要求 . 1二、综合训练任务 . 1三、总体设计 . 1四、详细设计说明 . 4(一)界面设计: . 4(二)添加动作监听事件:. 4(三)、表达式求值:. 5(四)进制转换:. 5(五)左右移位:. 6(六)逻辑与或非异或: . 6五、调试与测试. 71.标准计算器界面:. 72.科学计算器界面:. 73.表达式求值测试:. 7六、实习日志 . 11七、实习总结 . 12八、附录:核心代码清单 . 131.表达式求值代码:. 132.进制转化代码: . 163.移位代码: . 224.逻辑与或非异或代码:. 23附录 1:主界面设计: . 281 一、综合训练目的与要求

2、1.巩固和加深对课堂所学知识的理解与应用;2.学习掌握一般的软件的设计方法和查阅、运用资料的能力;3.掌握 JAVA 程序设计语言,面向对象的软件设计思想、方法。二、综合训练任务1.设计一个简易的计算器;功能要求:能实现基本的加、减、乘、除运算,以及表达式计算(加减乘除括号负号);二、八、十、十六进制间的相互转化,带符号的左移右移;逻辑与或非异或的运算;其他功能:开方、求倒数、化百分数、求平方、求立方、求x 的 y 次方、求阶乘、取余、取整(取小数点之前的)、求常用对数、求三角函数;界面简洁适用。2.设计任务要完成设计、编码、测试等过程,给出设计思路、主要的代码及其说明。3.整个过程要体现面向

3、对象的思想。三、总体设计开始主界面输入运算数据运算符号结果输出继续简易计算器总设计图图 1 2 主界面设计图(见附录1 )功能结构图图 2 计算器表达式计算进制间相互转换左右移位与或非异或运算其他基本功能求倒数化百分数求阶乘取余、取整平方、立方、开方求对数、求指数求三角函数用户点击按 钮 或 键盘输入触发事件文本框接收文本框 显示结果调用计算函数表达式 不合法时提醒运算流程图图 3 3 将字符串表达式,正确拆分放入input 数组,遍历input 数组左 括 号 直接入栈判 断 是 运 算符还是数值数 值 直 接 放 入 第二个数组获取合法表达式,计算开始右括号来了,while 循环判断 ,如

4、果栈顶不是左括号, 将栈顶元素出栈放入第二个数组 ;如果栈顶是左括号了,直接将其出栈如果是 +-*/ 运算符采用 while 循环,如果栈不空,且栈顶元素优先级高于当前数组元素中对应运算符号的优先级,同时栈顶不是左括号, 则将栈顶元素出栈放入第二个数组中最后遍历第二个数组,如果是数字,直接入栈,遇到运算符号,出栈两个数,用第二次出来的作为第一操作数,先出来的作为第二操作数,运算完成后入栈,继续循环最后如果栈中还有元素,将其出栈放入第二个数组,然后将栈清空Post 第二个数组Stack 栈判断栈是否空如果栈空,则将 inputi 元素入栈Post 第 二个数组最后返回运算结果Stack 栈(被清

5、空的 ) 表达式运算过程图4 4 四、详细设计说明(一)界面设计:1.先将窗体分为两大块,添加菜单栏,在菜单栏中添加菜单,在菜单中添加菜单项;均以数组的形式添加;2.第二块添加文本显示框于窗体北部,令添加一个面板jp 于窗体中心,将这个面板布局为边界布局管理器,分为上下两部分,上部分jpup 添加到该面板北部,下部分 jpdown 添加到 jp 面板中心 ; 3.将 jpup 面板布局为一行两列的网格布局管理器,在左边添加面板jp1,在右边添加面板 jp2, jp1 面板中放四个按钮, 分别为四种进制, 用来控制进制转换。jp2 面板中放七个按钮,分别为三个控制角度弧度梯度转换的,四字、双字、

6、单字、字节按钮,控制输入的二进制位数; 4.将 jpdown 面板布局为一行两列的网格布局管理器。将jp3 面板和 jp4 面板分别添加进去。 jp3 和 jp4 面板均设为边界布局管理器。5.将 jp5 面板和 jp6 面板分别加入 jp3 面板的北部和中部; jp5 面板中放两个复选框和两个文本框(做填充效果,不可编辑);6.将 jp6 面板布局为五行五列的网格布局管理器,以数组的方式添加25 个按钮 jb1i = new JButton(s1i); 7.将 jp7 和 jp8 分别添加到 jp4面板的北部和中部 ,jp7 面板里添加四个按钮,第一个是用来做填充效果的按钮,其余三个分别是

7、(Back)退格、(CE)清除、(C)清除。8.将 jp8 面板布局为五行六列的网格布局管理器,以数组的方式添加25个按钮 jb2i = new JButton(s2i) 。(二)添加动作监听事件:1.对菜单添加事件:当点击三个菜单(编辑、查看、帮助),会显示对应的下拉菜单;当点击编辑菜单中的复制时,条用copy 函数;当点击编辑菜单中的粘贴时,调用 paste函数;当点击查看菜单中的标准从科学计算器回到简易计算器界面,此实现时通过隐藏jpup面板和 jp3 面板,然后调整窗体大小, 即可实现面板收起的效果。 当点击科学的时候又回到科学计算器界面。当点击菜单中的进制按钮时,某种进制中没有的数值

8、将被屏蔽掉。当点击帮助时会看到关于计算器,此时点击会弹出关于记事本的帮助文档。2.对按钮添加事件:设置一个全局变量append ,判断是追加( true)还是替换(false); 对 于 数字 键, 采用 字 符串 中的indexOf 函 数, 如 果点击 的按 钮值 能 在“0123456789 ”中找到,则有对应位置返回值,如果找不到,则返回值为-1; 当点击小数点时, 判断文本框中的最后一位是不是小数点,如果是,截取掉,如果不是添加一个小数点;当点击正负号时,判断文本框中的最后一位是不是负号,如果是,截取掉,5 如果不是添加一个负号;当点击加减乘除运算符号时,可追加;当点击等号时显示表达

9、式结果,并且将全局变量置为 false,此时输入只能替换。3.对左半边按钮添加事件:当点击正弦、余弦、正切按钮时,调用Math 类里面的正弦、余弦、正切函数;当点击求平方、立方按钮(点击后append置为false)时,将文本框里的字符串转换为double 型,进行平方、立方,重设为文本框内容;当点击求倒数按钮时,先判断其是不是0,是 0 不能求倒数,如果是1,倒数直接置为1,如果不是 0 或 1,则转为 double值,用 1 除以该值。当点击求阶乘的按钮时,获取文本,调用Convert 类中的求阶乘的函数;当点击pi或 e 是文本框里显示圆周率或自然指数e 的值;当点击 log 或 ln

10、时,调用 Math里面的对应函数;当点击左移或右移时,append被置为 false ,等待输入左移或右移的位数,当点击了等号后,调用Convert 类里的左移或右移函数;设置一个全局变量 prestatu ,默认值为 1,代表 10进制, 0 代表十六进制, 2 代表八进制,3 代表二进制,当点击某种进制按钮时,如果文本框不空,会将文本框里的字符串做相应处理, 在根据 prestatu的值确定从哪个状态装换为此进制,调用 Convert类里对应的进制装换函数, 做完后将 prestatu的状态值改为当前状态值 ,作为下一次判断从哪种进制向哪种进制转换的依据;当点击求 x 的 y 次方按钮时,

11、 此时输入替换第一操作数,点击等号后,调用Math 类里的 pow 函数;4.对右半边按钮添加事件:当点击数字按钮或加减乘除及括号正负号按钮,本系统将判断其是否合法,若合法,在点击等号后调用Compute类的计算函数,计算完成后,将值传回,替换表达式;当点击Mod(取余)时等待输入的第二参数将替换第一参数, 点击等号后,调用 BigInteger 类里的 mod函数,显示余数 ;当点击 Int 时将文本框里的小数点后的字符串省略掉,达到取整的效果。(三) 、表达式求值:将文本框中的合法的表达式(此时是字符串)传入Calculate函数;当表达式字符串传进来之后,先正确拆分表达式(如3.5 要作

12、为一个操作数一起拆出来)存储于 input数组中。这个拆分主要是利用String类里的 substring函数,以运算符为边界, 当发现运算符时, 截取该位与上一个运算符之间的数作为一个操作数,同时截取该操作符。正确截取结束后,遍历input 数组,若是数字,直接进入post数组。若是左括号直接入栈。 若是右括号, 采用 while 循环判断栈顶是不是左括号, 如果不是,将栈顶元素出栈放入post数组中,如过栈顶是左括号,则直接出栈。如果是加减乘除,先判断栈是否空,如果栈空则直接入栈,采用while 循环判断,如果栈不空且栈顶元素优先级高于当前inputi 的优先级且栈顶不是左括号时,将栈顶元

13、素出栈放入post数组中,当 while 循环条件不成立时, 直接入栈。(四)进制转换:通过一组单选按钮控制进制间的转换,转换思路: 二进制、 八进制、十六进制向十进制转换时调用我写的函数XTOD (String s,int n) ,s 为要转化的数, n 代表从 n 进制转换为十进制。 采用 for 循环遍历 s 字符串,每次从后截取字符串的每一位 ,判断 是不 是十六 进制中 的特殊 字母, 如果 是换为 对应的 数值与6 Math.pow(n,i)相乘,如果不是则使用Integer.parseInt(s)将截取的元素换为int型与 Math.pow(n,i)相乘;在函数开始设置一个变量s

14、um ,在 for 循环内部设置临时变量 a 存储每次的结果,循环一次执行一次sum=sum+a; 最后 for 循环结束后 , 将 sum转换为字符串传回。当十进制想其他进制转换时,调用相应的函数。转换思路:先判断这个数与要转化的基数,如果小于基数,直接保存起来,如果不是,设置一个变量记录除的次数s,用 while 循环判断概述如果大于等于基数,则用它除以基数, s+, 循环结束之后创建数组长度为s 的数组, 用来存放余数。最后倒序遍历数组,链接成字符串返回。(五)左右移位:左移位: ,有符号的移位操作右移操作是将运算数的二进制码整体右移指定位数,右移之后的空位用符号位补充,如果是正数用0

15、补充,负数用 1 补充。对于左移:先以要移位的字符串长度创建一个String 型数组,我令数组长度为length,然后根据移位的位数n,采用 for 循环将原字符串的前length-n位循环拷贝到新建的数组的前length-n位,在剩余的数组位置添加0。最后遍历数组,连接字符串返回。对于右移:先以要移位的字符串长度创建一个String 型数组,我令数组长度为length,先判断第一位是1 还是 0,如果是 1,采用 for 循环,当 i 是小于要右移的位数时,则在新建的数组中填1;当 i 大于等于要右移的位数时,则截取原字符串的前 n 位填入新建数组的后length-n 位中。如果第一位是0,

16、则在前 n 为填0,其他一样。(六)逻辑与或非异或:比较两个字符串的每一位,或运算:若有一个是1,则或运算为 1,否则为0;与运算:若有一个为0,则为 0,否则为 1;异或运算:若两个字符串对应位不同,则为 1,否则为 0;取反运算, 将 0 换为 1,将 1 换为 0;以上这些均在 for循环中进行, 每次循环都会更新结果字符串,最后将结果字符串返回。 当然在进行与运算前, 考虑两个字符串长度, 把左边多出来的部分舍弃, 因为多出来的部分相当于与 0 对齐。 (其实,严格来说,应该按照机器中二进制表示的位数来确定的) ;对于或运算和异或运算前,也要考虑字符串长度。将多出来的部分进行循环遍历,

17、如果是 0 则在结果字符串中加上0;如果是 1 则在结果字符串中加1;因为 1 或 0 运算是 1,1 异或 0 运算时 1,0 或 0,0 异或 0 都是 0. 7 五、调试与测试1.标准计算器界面:点击查看菜单中的标准即可跳转到此界面。2.科学计算器界面 : 点击查看菜单中的科学即可跳转到此界面。3.表达式求值测试:用户用鼠标点击按钮或键盘输入表达式,点击等号后, 会验证表达式是否合法,如果不合法8 会提醒用户检查修改;如果合法则计算后用结果替代表达式。结果显示:表达式测试2:表达式中有负号时,用正负号或减号都可以。结果显示:表达式求值测试2:表达式中有小数的结果显示:9 表达式测试3:结

18、果显示:表达式验证:进制转化测试:10 十进制转化为八进制八进制转换为二进制:二进制转换十六进制:11 四种进制之间的相互转换均已实现。本系统的缺陷是:对于小数不能实现进制转换。没有实现科学计算器的统计功能。左右移位、与或非异或运算也实现了,但是没有考虑机器中二进制的表示位数。六、实习日志2011 年 12 月 31 日:分析题目, 确定要实现的功能:表达式求值, 进制间的相互转换,带符号的左移和右移,及其一些辅助功能,选择使用语言,完成实习任务书。2012 年 1 月 3 日:敲代码, 实现科学计算器主界面,并且添加部分事件,实现控制一些按钮不可用,实现按钮的不同颜色。凡事只要耐心点,再难的

19、事,也会变得简单。通过查看JDK 资料,及自己多多思考练习,终于完成了今日功能。2012 年 1 月 4 日:添加进制按钮事件,控制不同进制的非法数字不可用,添加清除按钮事件;添加正弦、余弦、正切、求倒数、求阶乘、求百分数、取整、取余、求平方、求立方、求对数、求指数等事件。 今天的实习中发现有很多细节性问题,所以要养成良好的习惯。细节决定成败, 态度决定一切。只要我耐心,就会成功。2012 年 1 月 5 日:添加表达式按钮事件及等号事件,完成表达式运算函数。这是此次实习最重要的部分,所以花费了很多时间,也遇到了各种各样的问题,不过经过我的仔细分析,不断调整代码,最终将表达式求值实现。遇到问题

20、,绝不退缩,迎难而上。2012 年 1 月 6 日:今天发现表达式中以括号开始的表达式有问题,经过研究, 发现是在拆分表达式时,当i=0 时,截取了两次括号,导致错误,因此对于判断条件添加一个i!=0 时才执行。2012 年 1 月 8 日:对于以负数开始的表达式计算有问题,经过研究, 当遍历到的是负号时,添加一个判断语句,如果i=0,且 inputi+1 匹配到 double 型数或者int 型数字时,先向post 数组放入一个0, 然后继续向下走。 对于表达式中间出现的负数,则先判断负号前面是左括号,后面是 double型数或者int 型数即可先在post 数组里放一个0,再继续往下走。1

21、2 212 年 1 月 9 日:实现从十进制向二进制、八进制、 十六进制转换的函数和从二、八、 十六进制到十进制转换及其之间的相互转换。这一块基本算法懂,所以写时只要注重细节就可以了。最后开始写课程论文。2012 年 1 月 10 日:测试调试代码,实现带符号的左移右移(没有考虑机器中二进制的表示位数)。完善课程论文。最近发现自己挺迷恋程序的,当遇到问题没有解决时,每天走路上想,吃饭时想,睡觉也想,连娱乐都放弃了。不要轻言放弃,一定会有收获。2012 年 1 月 11 日:制作答辩ppt,继续完善课程论文,测试规范代码。思考能否完善或添加新的功能。2012 年 1 月 12 日:答辩了, 实习

22、结束了, 这次的实习代码完全是自己一字一句的敲出来的,所以还是蛮开心的,而且感觉收获很大,最重要的是我发现自己挺喜欢研究程序的,尤其是遇到问题时,总能自己动手画图,调试,添加注释语句琢磨着解决问题,所以特别开心。七、实习总结通过为期两周的紧张实习,我对于面向对象的程序设计有了更深刻得了解,对面向对象的思想体会更深刻。面向对象的特点是抽象、封装、继承、 多态性。 系统中一切皆为对象;对象是属性及其操作的封装体;对象可按其性质划分为类,对象成为类的实例;实例关系和继承关系是对象之间的静态关系;消息传递是对象之间动态联系的唯一形式,也是计算的唯一形式;方法是消息的序列。通过这次实习, 我对于编写一个

23、小型软件有了一定的认识,首先我们要做好需求分析,分析我们要做什么软件,给哪些人用, 从他们的角度考虑,有什么特殊需要。分析清楚需求,着手设计,看有哪些功能,分几块做;将每一块封装成一个类,然后设计类,分析用到的属性,方法,考虑他们的修饰符,访问权限等。然后还要考虑用到哪些算法,尽量都将他们封装起来, 这样可以方便代码重用。有了一个详细的规划后,开始着手一步一步敲代码,当然要视情况而改变一些策略。这次实习思路明确,在做好需求之后,有了一个规划,确定了要实现的功能,开始完成每一块的代码,并进行测试,最后对整体代码进行测试调整。实习过程中遇到很多问题,因为我做的是计算器,并且用的是java 语言,然

24、后老师都说他们java 忘了,那我只能自己动手解决了。所以,刚开始很笨,就不停地画表达式计算的过程图,然后发现了问题,并解决了问题,结果一个本子画完了,发现自己好笨。到下次遇到问题,我就添加一些打印语句,然后很快发现了问题的所在处,也顺利的解决了问题,这样就高效多了。所以说通过这次实习我真正的学会了调代码,而且我也不再怕遇到错了,因为当我自己将错误解决的时候很高兴,同时我还帮助其他同学解决了很多问题,当然也从一些同学那里学到好多东西。这次实习的缺憾就是,我没有学习QT、MFC 的知识,通过和其他同学的交流,以及看他们所作的东西,我挺感兴趣的,所以我下载好了资料,电脑上也装好了数据库,回家后自己

25、继续学习,多做几个题目,好好练一练。我觉得这个实习特别有意思,大家一起做,不会了交流一下,能学到好多东西。珍惜这种学习机会,下学期就剩下一次了。通过这次实习,我发现其实再简单的东西要动手做也挺难得,但是只要认真做认真分13 析其实也挺简单的。世上无难事, 只怕有心人。 都说信管的编程能力弱,其实都是我们在逃避,我们要有探索和征服的精神,只有这样你才会有继续前进的动力。充实的实习生活结束了,回家好好充充电,下学期更加美好。八、附录:核心代码清单1.表达式求值代码:import java.util.Stack; public class Jisuan private String expressi

26、on;/ 表达式final static int N = 100;/ 存放表达式的数组最大长度public String getExpression() return expression; public void setExpression(String expression) this.expression = expression; public Jisuan(String expression) this.setExpression(expression); /优先级比较privateint com(String x) if (x.equals(*) | x.equals(/) ret

27、urn 2; if (x.equals(+) | x.equals(-) return 1; else return -1; /算术表达式求值publicdouble Calculate() String example = new String()+*/-); String input = new StringN;/ 存放合法的正确拆分的表达式String Post = new String N;/ 存放取除括号的表达式/ String expression = (3.5+6)*(45/38-12); int n = expression.length(); int count = 0; i

28、nt pre = -1; 14 for (int i = 0; i n; i+) if (example.indexOf(expression.charAt(i) != -1) if (pre != -1 & i != pre) inputcount+ = expression.substring(pre, i); /System.out.println(inputcount); if (pre = -1&i!=0) inputcount+ = expression.substring(0, i); /System.out.println(inputcount); inputcount+ =

29、expression.substring(i, i + 1); /System.out.println(inputcount); pre = i + 1; /* *pre -1 1 4 5 7 8 9 12 15 *i 0 1 4 6 7 8 11 14 17 */ for (int i=0;icount;i+) System.out.print(inputi); if (pre n) if (pre = -1) inputcount+ = expression.substring(0, n); else inputcount+ = expression.substring(pre, n);

30、/ for(int i=0;icount;i+) / System.out.println(inputi+ ); / Stack S = new Stack(); int j = 0; for (int i = 0; i = com(inputi) & (!S.peek().equals() Postj+ = S.pop(); System.out.println(*8); S.push(inputi); System.out.println(*9); while (!S.empty() Postj+ = S.pop(); 16 for (int i=0;ij;i+) System.out.p

31、rint(Posti+ ); S.clear(); int m = j; for (int i = 0; i m; i+) if (Posti.equals(+) double d = Double.parseDouble(S.pop(); S.push(String.valueOf (Double.parseDouble(S.pop() + d); elseif (Posti.equals(-) double d = Double.parseDouble(S.pop(); S.push(String.valueOf (Double.parseDouble(S.pop() - d); else

32、if (Posti.equals(*) double d = Double.parseDouble(S.pop(); S.push(String.valueOf (Double.parseDouble(S.pop() * d); elseif (Posti.equals(/) double d = Double.parseDouble(S.pop(); S.push(String.valueOf (Double.parseDouble(S.pop() / d); else S.push(Posti); double result = Double. parseDouble(S.pop(); r

33、eturn result; 2.进制转化代码:public class Zhuanhuan private String str;/ 从某种进制向某种进制转换的字符串private int n;/从 d 进制向十进制转换或者表示左移右移的位数public int getN() return n; public void setN(int n) /if(n=2|n=8|n=16) this.n = n; /else /System.out.println( 不合法的进制 ); 17 / public String getStr() return str; public void setStr(S

34、tring x) this.str = x; public Zhuanhuan(String x) this.setStr(x); public Zhuanhuan(String x, int d) this.setStr(x); this.setN(d); /* * 十进制转换为二进制*/ publicString DtoB() int d = Integer.parseInt(str); String b = ; if (d = 2) s+; n = n / 2; int m = new ints; int i = 0; do c = d / 2; 18 mi+ = d % 2; d =

35、c; while (c = 2); b = d+; for (int j = m.length - 1; j =0; j-) b += mj+; return b; /* * 十进制转换为八进制*/ publicString DtoO() int d = Integer.parseInt(str); String o = ; if (d = 8) s+; n = n / 8; int m = new ints; int i = 0; do c = d / 8; mi+ = d % 8; d = c; while (c = 8); o = d+; for (int j = m.length -

36、1; j = 0; j-) 19 o += mj; return o; /* * 十进制转换为十六进制*/ publicString DtoH() int d = Integer.parseInt(str); String x = ; if (d = 16) s+; n = n / 16; String m = new Strings; int i = 0; do c = d / 16; mi+ = chang(d % 16); d = c; while (c = 16); x = chang(d); for (int j = m.length - 1; j = 0; j-) x += mj;

37、 return x; 20 /* * 替换特殊的十六进制*/ publicString chang(int d) String x = ; switch (d) case 10: x = A; break; case 11: x = B; break; case 12: x = C; break; case 13: x = D; break; case 14: x = E; break; case 15: x = F; break; default: x = d+; break; return x; /* * 求阶乘函数* */ public long Jiecheng() int d = I

38、nteger.parseInt(str); if(d=0) return 1; else 21 long y=1; for(int i=1;i=d;i+) y=y*i; return y; /* * 将二进制或八进制或十六进制转化成十进制*/ public String XTOD()/n 为 2,8,16 String st = ; int sum = 0; for(int i=0;istr.length();i+) String s = str.substring(str.length()-1-i,str.length()-i); if(A.equals(s) int a = (int) (

39、int) 10*Math. pow(n, i); sum = a+sum; elseif(B.equals(s) int a = (int) (int) 11*Math. pow(n, i); sum = a+sum; elseif(C.equals(s) int a = (int) (int) 12*Math. pow(n, i); sum = a+sum; elseif(D.equals(s) int a = (int) (int) 13*Math. pow(n, i); sum = a+sum; elseif(E.equals(s) int a = (int) (int) 14*Math

40、. pow(n, i); sum = a+sum; elseif(F.equals(s) int a = (int) (int) 15*Math. pow(n, i); sum = a+sum; else inta = (int) (Integer.parseInt(str.substring(str.length()-1-i,str.length()-i)*Math.pow(n, i); sum = a+sum; 22 /System.out.println(sum); st = sum+; return st; 3.移位代码:/ * 左移位: ,有符号的移位操作右移操作是将运算数的二进制码

41、整体右移指定位数,右移之后的空位用符号位补充,如果是正数用0 补充,负数用1 补充。正数在计算机中是用二进制表示的,负数在计算机中使用补码表示的* */ publicString shiftleft() String st = ; String ss = new Stringstr.length(); for(int i=0;istr.length();i+) if(iss.length-n) System.out.println(*1); ssi=str.substring(i+n,i+n+1); System.out.println(*2); else System.out.println

42、(*3); ssi=0; System.out.println(*4); for(String s1:ss) st = st + s1; return st; /* * 右移* */ publicString shiftrigth() String st = ; String ss = new Stringstr.length(); 23 for(int i=0;istr.length();i+) if(1.equals(str.substring(0,1) System.out.println(*11); if(in) ssi=1; System.out.println(*12); else

43、 ssi=str.substring(i-n,i-n+1); System.out.println(*13); else if(in) System.out.println(*14); ssi=0; System.out.println(*15); else System.out.println(*16); ssi=str.substring(i-n,i-n+1); System.out.println(*17); for(String s1:ss) st = st + s1; return st; 4.逻辑与或非异或代码:/* * 与this.str & x2 */ public Strin

44、g and(String x2) String st = ; int n1 = str.length(); int n2 = x2.length(); if(n1=n2) for (int i=0;in1;i+) if(str.charAt(i)=0|x2.charAt(i)=0) 24 st = st + 0; else st = st + 1; elseif(n1n2)/ 多出来的部分相当于与0 与,所以被舍弃x2 = x2.substring(n2-n1,x2.length(); for (int i=0;in1;i+) if(str.charAt(i)=0|x2.charAt(i)=0

45、) st = st + 0; else st = st + 1; else / 多出来的部分相当于与0 与,所以被舍弃str = str.substring(n1-n2,str.length(); for (int i=0;istr.length();i+) if(str.charAt(i)=0|x2.charAt(i)=0) st = st + 0; else st = st + 1; return st; /* * 或*/ public String or(String x2) String st = ; int n1 = str.length(); int n2 = x2.length(

46、); if(n1=n2) for (int i=0;in2) 25 for (int j=0;jn1-n2;j+) if(str.charAt(j)=0) st = st + 0; else st = st + 1; str = str.substring(n1-n2,str.length(); for (int k=0;kstr.length();k+) if(str.charAt(k)=1|x2.charAt(k)=1) st = st + 1; else st = st + 0; else for (int j=0;jn2-n1;j+)/100111 | 101 = 100111 if(

47、x2.charAt(j)=0) st = st + 0; else st = st + 1; x2= x2.substring(n2-n1,x2.length(); for (int k=0;kx2.length();k+) if(str.charAt(k)=1|x2.charAt(k)=1) st = st + 1; else st = st + 0; return st; /* * 异或 ,不同则为1 */ public String xor(String x2) String st = ; int n1 = str.length(); int n2 = x2.length(); if(n

48、1=n2) 26 for (int i=0;in2) for (int j=0;jn1-n2;j+)/1001001 10101 = 1011100 if(str.charAt(j)=0) st = st + 0; else st = st + 1; str = str.substring(n1-n2,str.length(); for (int k=0;kstr.length();k+) if(str.charAt(k)!=x2.charAt(k) st = st + 1; else st = st + 0; else /n1n2 for (int j=0;jn2-n1;j+)/100111

49、 101 = 100010 if(x2.charAt(j)=0) st = st + 0; else st = st + 1; x2= x2.substring(n2-n1,x2.length(); for (int k=0;kx2.length();k+) if(str.charAt(k)!=x2.charAt(k) st = st + 1; else st = st + 0; return st; /* 27 * 取反*/ public String not() String st = ; for(int i=0;istr.length();i+) if(str.charAt(i)=0) st = st + 1; else st = st + 0; return st; 28 附录 1:主界面设计:JFrame 窗体JMenuBar菜单栏JTextField 文 本框(显示运算 ) JPanel jp 中 心 面板JPanel jpup JPanel jpdown jp1 存放进制按钮jp2 存 放字节按钮Jp3 Jp4 Jp5 存 放复选框Jp6 存 放左边按钮Jp7 存 放清除按钮Jp8 存 放右边按钮主界面设计图图 1

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号