一个使用J2ME技术实现的简单计算器
作者:陈跃峰
在实际学习的过程中,经常做一些小的项目,可以把学到的技术综合应用起来,获得一定的成就感,并锻炼逻辑思维能力。
本计算器代码的功能:
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();
}
}
分享到:
相关推荐
在这个"j2me code 源程序 计算器"的项目中,我们讨论的是一个使用J2ME技术编写的计算器应用程序的源代码。 J2ME由几个关键组件组成,包括Connected Limited Device Configuration (CLDC)和Mobile Information ...
总结来说,“J2ME初级计算器”是一个利用Java微型版技术开发的移动计算器应用,它不仅具备基本的加减乘除功能,还特别实现了开N次方和乘N次方的计算,这些功能依赖于高效实现的二分法算法。对于学习J2ME开发或对数学...
【标题】"jisuanqi.rar_计算器j2me"指的是一个基于Java 2 Micro Edition (J2ME)技术开发的手机计算器应用。J2ME是Java平台的一个子集,专门用于资源有限的移动设备,如早期的智能手机和平板电脑。这个压缩包文件包含...
在本教程中,我们将深入探讨如何使用J2ME技术开发一个简单的手持设备计算器应用。 1. **J2ME概述** J2ME由配置(Configurations)和 profiles(Profiles)组成,适应不同类型的设备。其中,Mobile Information ...
通过创建简单的项目,例如开发一个简单的计算器应用或实现一个基于位置的服务,可以逐步熟悉J2ME的开发流程和技巧。同时,不断关注J2ME的最新发展,如新的配置和profile,以及与之相关的开源库和框架,将有助于保持...
该书的源代码提供了丰富的实例,帮助读者深入理解J2ME编程的核心技术和实践技巧。下面将详细阐述J2ME的相关知识点,并结合源代码文件名“精通j2me手机游戏与应用程序设计”来解析其可能包含的内容。 首先,J2ME是...
在本文中,我们将深入探讨如何使用J2ME(Java Micro Edition)技术开发一个简单的计算器应用。J2ME是一种用于嵌入式设备和移动设备的Java平台,它为开发者提供了构建功能丰富的应用程序的能力,如我们日常使用的...
开发J2ME应用通常需要一个集成开发环境(IDE),如NetBeans或Eclipse。这些IDE提供了编写、编译、模拟和部署J2ME应用程序的工具。安装后,需要配置J2ME SDK,并创建新的J2ME项目。 3. **基础语法与编程结构** ...
Java Micro Edition(J2ME)是Java平台的一个子集,主要用于嵌入式系统和移动设备,如早期的智能手机、电视盒和家用电器。本教程将带你逐步深入J2ME的世界,理解其基本概念、开发环境搭建、应用设计与实现,直至成为...
这个“J2ME移动开发视频讲义2入门教程”是由郭克华教授提供的,旨在帮助初学者掌握J2ME技术,进行移动应用的开发。 一、J2ME基础知识 1. **J2ME架构**: J2ME由配置(Configurations)和 profiles(Profile)组成。...
这个计算器并非针对Android操作系统,而是基于纯J2ME技术实现,因此需要一个兼容的J2ME模拟器或实际设备来运行和测试。 该程序的核心部分是计算逻辑,这部分涉及到计算机科学中的基础算法和数据结构。计算器的基本...
【标题】"计算器 源码.rar"是一个包含J2ME平台上的Java计算器应用程序源代码的压缩文件。J2ME,全称为Java Micro Edition,是Java技术的一个分支,主要用于嵌入式设备和移动设备,如早期的手机和智能手表等。这个...
开发者通过阅读和分析这些源代码,可以了解到如何在S60平台上使用Java来实现计算器的各种运算逻辑,包括基本的加减乘除、科学计算以及可能的复杂函数。源码通常包括UI布局文件(XML格式)、事件处理逻辑(如按钮点击...
基于JAVA语言设计的计算器毕设课设项目软件源代码及详细设计文档资料(40个合集): JAVA+SQL办公自动化系统(源代码+论文+外文翻译) JAVA+SQL电子通讯录带系统托盘(论文+源代码) JAVA+SQL离散数学题库管理系统(源代码...
Java 2 Micro Edition(J2ME)是Java平台的一个子集,主要用于嵌入式设备和移动设备,如手机、智能家电等。J2ME为开发者提供了在小型设备上开发应用程序的框架,包括用户界面、网络连接和数据存储等功能。本教程通过...
1. J2ME技术:J2ME(Java 2 Platform, Micro Edition)是Sun公司专门针对移动设备(如手机、PDA等)所开发的Java技术平台。它由一组技术规范组成,其中包括了CDC(Connected Device Configuration)、CLDC...
通过学习这些章节,初学者可以逐步掌握J2ME的开发技术,包括如何创建图形用户界面、处理用户输入、实现网络通信以及优化代码以适应不同设备的性能限制。 总结来说,J2ME教程是学习移动设备和嵌入式设备上Java应用...
综上所述,这个项目是一个基于J2ME的简单计算器应用,使用Ant作为构建工具,NetBeans作为IDE,开发者通过编写源代码实现基本的计算功能,并按照标准的Java项目结构进行组织。对于初学者来说,这是一次很好的实践,...
J2ME是Java平台的一个子集,专为资源有限的嵌入式设备,如移动电话和PDA设计。它由一系列配置和 profiles 组成,如MIDP(Mobile Information Device Profile)和CLDC(Connected Limited Device Configuration),...
J2ME,全称为Java 2 Micro Edition,是Java平台的一个子集,专为资源有限的移动设备和嵌入式系统设计。它提供了一套标准的API,使得开发者可以编写跨平台的应用程序,覆盖范围包括手机、智能手表、电视盒等。在本...