一个使用J2ME技术实现的计算器的代码
2007-12-28 05:10
776 查看
[align=center]一个使用J2ME技术实现的简单计算器[/align][align=center]作者:陈跃峰[/align][align=center]出自:http://blog.csdn.net/mailbomb[/align] 在实际学习的过程中,经常做一些小的项目,可以把学到的技术综合应用起来,获得一定的成就感,并锻炼逻辑思维能力。 本计算器代码的功能:1、 实现四则运算,其中除法实现的是整数除法2、 实现清楚输入功能实现该功能的核心思路:1、 对本程序的功能进行状态划分,总共划分出三个状态:a) 输入第一个数字状态b) 输入运算符号状态c) 输入第二个数字状态通过状态划分,每个状态进行对应的绘制和事件处理,这样逻辑比较清晰,编写代码起来比较简单。2、 数据的存储 在计算器程序中,存储数据是一个比较核心的逻辑,本程序的实现方式,判断用户按下的是否是数字按键(KEY_NUM0到KEY_NUM9),这些按键的keyCode和对应的字符编码相同,例如KEY_NUM0和字符0的编码一样,利用这个规律,获得数字按键的值,可以通过keyCode – KEY_NUM0实现。 这样只能换算出来一次的输入,而实际输入的结果应该等于: 上次输入的值 × 10 + 本次输入的内容 例如,上次输入的是1,本次输入3,则实际输入的内容应该是1 × 10 + 3 = 13本程序通过这样的方式存储用户的输入。本程序的操作说明:1、 数字输入按数字键实现2、 运算符号使用星号键输入,按一次星号键切换一次运算符号3、 左软键代表清除,每次清除一个数字或运算符4、 右软键代码计算,计算实际的结果附源代码: import javax.microedition.lcdui.*;/** * 计算器界面和逻辑 */public class CalcCanvas extends Canvas {/**状态值*/int status;/**输入第一个数字状态*/final int INPUT_FIRST = 1;/**输入第二个数字状态*/final int INPUT_SECOND = 3;/**输入运算符号状态*/final int INPUT_FLAG = 2;/**绘制内容右下角的x坐标*/int x = 150;/**绘制内容右下角的x坐标*/int y = 160;/**行高*/int lineHeight = 20;/**第一个数字的值*/int firstNum = 0;/**第二个数字的值*/int secondNum = 0;/**运算符号,0无意义,1代表+,2代表减、3乘4除*/int flag = 0;/**屏幕宽度*/int w;/**屏幕高度*/int h; /**运算符数组*/String[] sFlag = {"+","-","*","/"};public CalcCanvas(){ //初始化状态为输入第一个数字状态 status = INPUT_FIRST; //设置全屏幕 setFullScreenMode(true); //获得屏幕高度和宽度 h = getHeight(); w = getWidth();}protected void paint(Graphics g) { //清屏 g.setColor(0xffffff); g.fillRect(0,0,w,h); g.setColor(0); //绘制按钮文字 g.drawString("=", w,h, Graphics.RIGHT | Graphics.BOTTOM); g.drawString("C", 0,h, Graphics.LEFT | Graphics.BOTTOM); //根据状态值确定绘制的内容和位置 switch(status){ case INPUT_FIRST: //绘制第一个数字 g.drawString("" + firstNum, x, y, Graphics.RIGHT | Graphics.BOTTOM); break; case INPUT_FLAG: //绘制第一个数字 g.drawString("" + firstNum, x, y - lineHeight, Graphics.RIGHT | Graphics.BOTTOM); //绘制运算符号 g.drawString(sFlag[flag - 1], x, y, Graphics.RIGHT | Graphics.BOTTOM); break; case INPUT_SECOND: //绘制第一个数字 g.drawString("" + firstNum, x, y - 2 * lineHeight, Graphics.RIGHT | Graphics.BOTTOM); //绘制运算符号 g.drawString(sFlag[flag - 1], x, y - lineHeight, Graphics.RIGHT | Graphics.BOTTOM); //绘制第二个数字 g.drawString("" + secondNum, x, y, Graphics.RIGHT | Graphics.BOTTOM); break; }}public void keyPressed(int keyCode){ //按钮C的处理 if(keyCode == -6){ //左软键 //根据状态值确定清除的内容 switch(status){ case INPUT_FIRST: firstNum /=10; break; case INPUT_FLAG: //切换到输入第一个数字状态 status = INPUT_FIRST; //清除运算符号 flag = 0; break; case INPUT_SECOND: //清除第二个数字 secondNum /= 10; //如果第二个数字为0,则切换到输入运算符状态 if(secondNum == 0){ status = INPUT_FLAG; } break; } } if(keyCode == -7){ //按钮=的处理 //如果处于输入第二个数字状态,且第二个数字不是0 if((status == INPUT_SECOND) && (secondNum != 0)){ //计算结果,并把结果赋值给第一个数字 switch(flag){ case 1: firstNum += secondNum; break; case 2: firstNum -= secondNum; break; case 3: firstNum *= secondNum; break; case 4: firstNum /= secondNum; break; } //恢复状态到输入第一个数字状态 status = INPUT_FIRST; //清除运算符和第二个数字 flag = 0; secondNum = 0; } } //输入的是数字键 if((keyCode >= KEY_NUM0) && (keyCode <= KEY_NUM9)){ //如果是输入第一个数字状态 switch(status){ case INPUT_FIRST: firstNum = firstNum * 10 + (keyCode - KEY_NUM0); break; case INPUT_SECOND: secondNum = secondNum * 10 + (keyCode - KEY_NUM0); break; case INPUT_FLAG: //切换到输入第二个数字状态 status = INPUT_SECOND; //记忆输入的数字 secondNum = secondNum * 10 + (keyCode - KEY_NUM0); break; } } //按星号实现输入运算符号 if(keyCode == KEY_STAR){ //如果当前是输入第一个数字状态或输入运算符状态 if((status == INPUT_FIRST) || (status == INPUT_FLAG)){ //输入运算符 if(flag < 4){ flag++; }else{ flag = 1; } //设置状态为输入运算符状态 status = INPUT_FLAG; } } //重绘 repaint();}}
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1933379
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1933379
相关文章推荐
- 一个使用J2ME技术实现的计算器的代码
- 一个使用J2ME技术实现的计算器的代码
- 一个使用J2ME技术实现的计算器的代码
- 一个使用J2ME技术实现的计算器的代码
- 一个使用J2ME技术实现的计算器的代码
- 一个使用J2ME技术实现的计算器的代码
- 使用J2ME技术实现简单的动画(附代码实现)
- Python+tkinter使用80行代码实现一个计算器实例
- 使用J2ME技术实现简单的动画(附代码实现)
- 80行代码使用Python+tkinter实现一个计算器
- 使用IO技术,创建一个目录,然后复制一个文件到该目录!实现复制的功能。(在博客园上传的第一份代码)
- 使用EF6和MVC5实现一个简单的选课系统--EF6的代码优先迁移和部署(5/12)
- 用java实现验证码的生成,以下代码是一个controller,可以直接使用!
- ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局
- 一个使用监听器模式实现的J2ME网络编程框架,包括一个简单的登录功能实现(含源代码)
- 使用纯代码自定义UItableviewcell实现一个简单的微博界面布局
- 使用J2ME技术实现简单的动画
- 市面上所有号称"虚拟机","防火墙"的实时监控杀毒软件无一不是使用的IFSHOOK技术.但是同时也有一些朋友不断写MAIL给我打听如何实现读写的监控.下面给出用VTOOLSD写的代码.也就是所有实时杀毒软件的奥秘.同时,很多拦截文件操作的软件,例如对目录加
- 使用JVM TI技术插装字节码,实现Java代码执行控监Agent
- 使用纯代码自定义UItableviewcell实现一个简单的微博界面布局