当前位置:首页 » 网页前端 » web计算
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

web计算

发布时间: 2022-02-01 23:29:29

Ⅰ 【Web前端基础】算数运算符是什么意思

算术运算符的运算数必须是数字类型。算术运算符不能用在布尔类型上,但是可以用在char类型上,因为实质上在Java中,char类型是int类型的一个子集。

Ⅱ 基于WEB的网络计算的定义

基于web,可以理解为使用http协议进行的网络计算
网络计算参考:
网络计算的四种形式
------------------------------------------------------------------

肖侬 卢锡城 王怀民(转载自计算机世界)
20世纪90年代,Internet蔓延到世界各地,成为人们沟通信息和协同工作的有效工具,更为重要的是,Internet上汇集的成千上万的计算资源、数据资源、软件资源、各种数字化设备和控制系统共同构成了生产、传播和使用知识的重要载体。人们开始思考如何将物理上互连的众多资源汇聚起来,联合提供服务,重新认识网络计算技术的实质。
目前,网络计算正处于发展阶段,人们对它的定义还没有形成共识,但一个相对可以接受的理解是:“网络计算”是把网络连接起来的各种自治资源和系统组合起来,以实现资源共享、协同工作和联合计算,为各种用户提供基于网络的各类综合性服务。基于此,人们把企业计算、网格计算、对等计算和普及计算归类为网络计算。
企业计算:以中间件为核心
企业计算是“以实现大型组织内部和组织之间的信息共享和协同工作为主要需求而形成的网络计算技术”,其核心是Client/Server计算模型和相关的中间件技术。
早在20世纪80年代,人们就提出在互连的计算机硬件上部署新型的分布式操作系统,全面彻底地管理整个系统,给用户单一的系统视图。尽管这一努力产生了许多技术成果和实验系统,但一直没有形成可用的产品,人们直觉地感到在不断扩展的局部自治异构系统上实现资源的集中管理几乎是不可能的,于是开始采用中间件平台技术,以屏蔽系统的异构性,支持局部自治系统的信息交互和协同。经过十几年的发展,中间件取得了令人瞩目的发展,出现了远程数据库访问、远程过程调用、消息传递、交易管理等各类中间件。
20世纪90年代末,面向对象的中间件技术成为中间件平台的主流技术,出现了以Sun公司的EJB/J2EE、Microsoft的COM+/DNA和OMG的CORBA/OMA为代表的三个技术分支。其研究热点是建立标准化的对象请求代理,屏蔽网络环境下计算平台、操作系统、编程语言、网络协议的异构性和复杂性,使分布在网络上的应用系统能够协同工作,为网络应用提供通用的高级网络管理服务以及与应用领域相关的增值服务。
进入新世纪,随着电子商务需求的发展,企业计算面临企业间的信息共享和协同工作问题,面向Web的企业计算解决方案成为热点,为此W3C提出了Web Service技术体系,Microsoft推出了.Net技术,Sun推出SUN ONE架构,企业计算技术全面进入Internet时代。 网格计算:让计算能力“公用化”
网格计算(Grid Computing)是网络计算的另一个具有重要创新思想和巨大发展潜力的分支。最初,网格计算研究的目标是希望将超级计算机连接成为一个可远程控制的元计算机系统(MetaComputers);现在,这一目标已经深化为建立大规模计算和数据处理的通用基础支撑结构,将网络上的各种高性能计算机、服务器、PC、信息系统、海量数据存储和处理系统、应用模拟系统、虚拟现实系统、仪器设备和信息获取设备(如传感器)集成在一起,为各种应用开发提供底层技术支撑,将Internet变为一个功能强大、无处不在的计算设施。
网格计算可以从三个方面来理解。
首先,从概念上,网格计算的目标是资源共享和分布协同工作。网格的这种概念可以清晰地指导行业和企业对各部门的资源进行基于行业或企业的统一规划、部署、整合和共享,而不仅仅是行业或大企业中的各个部门自己规划、占有和使用资源。这种思想的沟通和认同对行业和企业是至关重要的,将提升或改变整个行业或企业信息系统的规划部署、运行和管理机制。
其次,网格是一种技术。为了达到多种类型的分布资源共享和协作,网格计算技术必须解决多个层次的资源共享和合作技术,制定网格的标准,将Internet从通信和信息交互的平台提升到一个资源共享的平台。
最后,网格是基础设施,是各种网络来综合计算机、数据、设备、服务等资源的基础设施。随着网格技术逐步成熟,建立地理分布的遍布全国或全球的大型资源节点,集成网络上的多个资源,联合向全社会按需提供全方位的信息服务。这种设施的建立,将使用户如同今天我们按需使用电力一样,无需在用户端配全套计算机系统和复杂软件,就可以简便地得到网格提供的各种服务。
如同电力系统一样,把网格设施作为一个国家战略信息基础设施来规划、建设和运行管理,其复杂度和难度是相当大的,这里面有思想和观念上的变化,技术上的难点,以及国家法律和政策上的问题等,需要经过多年的艰苦努力。但是,大型企业、行业、国防等部门完全可以从现在就开始实施网格基础设施战略。
网格计算的重要战略意义及其广阔应用前景,使其成为当今吸引众多研究人员和巨大资金投入的研究热点,一些大型网格计算研究项目相继启动。截止到目前,最着名的网格计算研究项目包括以下一些:
● 美国自然科学基金于1997年底开始实施的“分布式网格”研究项目,其目标是在美国建立遍及全国的计算网格,支持重大科学与工程计算,为用户提供到桌面上的虚拟高性能计算环境。
● 美国国家航空和宇宙航行局(NASA)的IPG(Information Power 网格)项目。这是一个20年的研究计划,目的是让人们使用计算资源和信息资源就像使用电力网提供的电力资源一样方便快捷。
● 美国能源部开发的ASCI 网格已经投入生产性使用,其主要用途是核武器研究。
● 美国国防部的全球信息网格(GIG)项目是最庞大的网格计划,用于美军新世纪作战支撑,预计2020年完成。
● 欧洲共同体的Euro网格和Data 网格。主要用于包括高能物理、生物计算、气候模拟等多个领域的应用。
● 2001年8月,美国NSF宣布了一个重大科研项目,研制名为“分布式万亿级设施”(Distributed Terascale Facility)的网格系统,简称Tera网格,它是世界上第一个从设计开始就面向网格的广域超级计算平台,也是第一个无处不在的计算机基础设施。
● 我国科技部在“九五”开展了国家高性能计算环境(网格)建设和关键技术的研究。“十五”期间科技部加大了对网格技术研究和推广的力度,目标是突破网格关键技术,建立网格计算技术标准,将网格计算技术应用到行业和企业应用中,建立行业和企业应用网格,进一步加强全社会共享的国家高性能网格计算环境的建设,推动我国网格产业的形成和发展。
目前,大的网格项目研究和实施有一个显着的特点,即各个项目是直接面向应用,与应用领域紧密相关。目前,IBM、HP、Sun、LSF、Boeing等公司都已经进入网格计算领域,加紧研究相关的技术和产品。
这里需要强调的是“网格计算”与“高性能计算机”的关系。高性能计算机是网格计算环境结构的节点和重要组成部分;网格计算技术是高性能计算技术的发展方向之一,它并不能替代超高性能计算机系统。但是未来的超高性能计算机系统必须支持网格计算环境,应能够很容易地融入到网格计算环境中,将其强大的计算和数据存储处理能力提供给众多的用户使用。网格计算技术的目的是结合高性能计算技术和网络计算技术,将高性能计算机的能力释放出去,构造一个公共的高性能处理和海量信息存储的计算基础设施,使各类用户和应用能够共享资源。因此,网格计算将会促进高性能计算机应用的发展,促进高性能计算机服务市场的发展,刺激市场对高性能计算机和海量存储系统的需求。
对等计算:倡导“平等”共享
对等计算(Peer-to-Peer,简称P2P)是在Internet上实施网络计算的新模式。在这种模式下,服务器与客户端的界限消失了,网络上的所有节点都可以“平等”共享其他节点的计算资源。
IBM为P2P下了如下定义:P2P系统由若干互联协作的计算机构成,且至少具有如下特征之一:系统依存于边缘化(非中央式服务器)设备的主动协作,每个成员直接从其他成员而不是从服务器的参与中受益;系统中成员同时扮演服务器与客户机的角色;系统应用的用户能够意识到彼此的存在,构成一个虚拟或实际的群体。
不难看出,P2P把网络计算模式从集中式引向分布式,也就是说,网络应用的核心从中央服务器向网络边缘的终端设备扩散:服务器到服务器、服务器到PC机、PC机到PC机,PC机到WAP手机,所有网络节点上的设备都可以建立P2P对话。
P2P给Internet的分布、共享精神带来了无限的遐想。有观点认为,至少能开发出几百种应用。但从目前的应用看,P2P的威力还主要体现在大范围的共享和搜索的优势上,诸如对等计算、协同工作、搜索引擎、文件交换等。
普及计算:计算无所不在
普及计算(ubiquitous computing or pervasive computing)强调人与计算环境的紧密联系,使计算机和网络更有效地融入人们的生活,让人们在任何时间、任何地点都能方便快捷地获得网络计算提供的各种服务。
普及计算研究的内容主要包括两个方面:自然的人机交互和网络计算。美国排名前10位的大学无一例外地投巨资设立了以“普及计算”为主要方向的研究计划。目前有4个研究计划最具影响力,这些计划的目标是提出全新的体系结构、应用模式、编程模型等基础理论模型和方法。
● MIT的Oxygen研究计划
该计划的研究人员认为,未来世界将是一个到处充斥着嵌入式计算机的环境,它们已经融入了人们的日常生活中。Oxygen希望充分利用这些计算资源,达到“做得更少,完成更多(to do more by doing less)”的目的。
● CMU的Aura研究计划
它致力于研究在普及计算时代,在用户和计算环境之间增加一层软件层(称为Aura),由Aura代理用户去管理、维护分布式计算环境中频繁变化、松散耦合的多个计算设备,以完成用户的目标任务。Aura推崇的理念是:“‘人的精力’(User Attention)是最宝贵的资源,应该让它集中在用户要完成的任务上,而不是管理、配置硬件和软件资源上”。
● UC Berkeley的Endeavour计划
这是UC Berkeley进行的旨在通过运用信息技术,提供全新的、全球规模的信息基础设施,从根本上方便人们与信息、设备和他人进行交互的计划。这些信息设施应该能够动态实时地协调世界上任何可用的资源来满足用户计算的需要,其创新点之一是“流体软件”(Fluid Software),这种软件能够自适应地选择在何处执行、在何处存储,它通过协议获得可用资源并向其他实体提供服务。
● 华盛顿大学的Portolano计划
该计划提出了“数据为中心的网络”以适应让计算本身变成不可见的(Invisible Computing)的要求。该计划认为目前计算机技术的发展仍然是技术驱动而非用户需求驱动。为了改变这一现状,该计划致力于研究根据用户的位置变化而自适应地改变软件用户界面的机制、以数据为中心的网络以及新型的分布式服务模型。
各类网络计算之间的异同
以上四类网络计算虽然侧重点不同,但最终的目标是一致的:广泛共享、有效聚合、充分释放。
所谓广泛共享,是指通过各种方法、技术和策略将网络上的各种资源提供给网络上众多用户共享、使用;所谓有效聚合,是指将网络上的巨大资源通过协同工作连接集成起来,产生巨大的综合效能,联合完成应用任务;所谓充分释放,是指为用户提供良好的开发手段和使用环境,将网络上多种资源的聚合效能按照需求传递给用户,为用户提供个性化的信息服务、计算服务和决策支持服务。
但是面对众多的网络计算技术和应用,人们有时很难区分它们之间的技术差异,不知道谁将成为未来网络计算的主导。事实上,虽然最终目标一致,但各种网络计算技术的应用范围和研究对象的规模、层次却各有不同。
面向对象的分布式计算技术强调的是分布系统的集成能力,以两层或多层Client/Server为主要计算模式,关心的是简化用户端的工作,强化多层服务器的功能,注重分布系统之间的协同工作和快速的应用开发和实现,强调应用服务之间的可交互、可操作性和代码的可移植性,通常关注一个组织内的资源共享。
P2P技术弱化了集中服务器的功能,重视网络中所有个体的作用,强调的是个体之间、系统之间、计算机之间的直接通信和联系,每一个参与者既是客户又是服务方,这使人们在Internet上的共享行为被提升到了一个更广泛的层次,使人们以更主动的方式参与到网络中去。它与现行以中间件为主的分布式计算技术所采用的Client/Server模式有本质区别。
网格计算在Internet基础上强调对计算、数据、设备等网络基本资源进行整合,力图将Internet作为一个社会化的计算基础设施。在计算模型、技术路径和研究目标上,网格计算和目前分布计算中间件领域面向应用级别的交互、互操作和开发有很大的不同。它强调多机构之间大规模的资源共享和合作使用,提供了资源共享的基本方法,而分布计算技术没有提供多组织之间的资源共享通用框架。显然,网格计算正在建立一种新的Internet基础支撑结构(如同TCP/IP、WWW协议和相应的软件系统奠定了现行Internet的基础),是21世纪Terascale设施的信息处理基础设施的先期实践。
普及计算模式则是要颠覆“人使用计算机”的传统方式,将人与计算机的关系改变为“计算机为人服务”,从某种意义上说,是让人与计算环境更好地融合在一起。
尽管各种网络计算技术有差异,但是它们之间并不是冲突的关系,而是一种正交关系,有时甚至是融合的,因此,各种网络计算技术可以共存。例如网格计算和CORBA、SOAP、XML等技术结合可以访问多个机构组成的虚拟组织的资源。
信息技术的多变性使我们不能肯定10年之后的网络计算将会发展到何等程度,但是多种网络计算形式共存、相互结合和融合是肯定的。无论如何,从当今基于Internet的各种网络计算实践和研究来看,实现网络资源的共享,提供大规模协同计算能力和对资源的有效访问,是网络计算未来发展的趋势,是下一代Internet的技术基础。

posted on Monday, April 19, 2004 12:19 AM

Ⅲ 编写一个web计算器

呵呵,需要的话可以给你发个,我前两天刚给人做了个,不过比较简单 呵呵,需要的话可以给你发个,我前两天刚给人做了个,不过比较简单

Ⅳ web计算问题

-5.5

话说这种问题你就不会自己在浏览器上打开看一下的嘛(ˊ_>ˋ

要问为什么的话,前置++先加后赋值,所以m=11,然后javascript不会截断整数除法,直接转换为浮点数,所以m/n=5.5,所以5.5-11=-5.5

Ⅳ 一个关系WEB计算器的事情

你的程序的问题:eval(c)产生的结果是字符串连接,比如如数12+34,结果会成为1234。

修改后的程序如下:

<html>
<script type="text/javascript">
function a()
{
alert(opt.value);
switch(opt.value){
case '+':y4.value=parseFloat(y1.value)+parseFloat(y2.value);break;
case '-':y4.value=parseFloat(y1.value)-parseFloat(y2.value);break;
case '*':y4.value=parseFloat(y1.value)*parseFloat(y2.value);break;
case '/':y4.value=parseFloat(y1.value)/parseFloat(y2.value);break;
otherwise: alert(opt.value);
}
}
</script>
<body>
<input type="text" name="y1">
<select id="u" name=opt>
<option value='+'>+</option>
<option value='-'>-</option>
<option value='*'>*</option>
<option value='/'>/</option>
</select>
<input type="text" name="y2">
<input type="button" name="y3" value="=" onclick="a()">
<input type="text" name="y4">
</body>
</html>

以上代码在IE6调试通过。

Ⅵ 求解做一个Web数学计算器

简单的写了个代码,简单用了内嵌的CSS、javascript.

<html>
<head>
<title>Demo</title>
<style type="text/css">
*{margin:0px;padding:0px;}
.table1{width:300px;border:1px solid blue;background:gray;}
</style>

<script type="text/javascript">
function myCal()
{
var num = document.getElementsByTagName("input");
var oper = document.getElementsByTagName("select");
var resultp;
switch(oper[0].value)
{
case "+":
resultp=parseFloat(num[0].value)+parseFloat(num[1].value);
alert(resultp);
break;
case "-":
resultp=parseFloat(num[0].value)-parseFloat(num[1].value);
alert(resultp);
break;
case "*":
resultp=parseFloat(num[0].value)*parseFloat(num[1].value);
alert(resultp);
break;
case "/":
resultp=parseFloat(num[0].value)/parseFloat(num[1].value);
alert(resultp);
break;
default:
break;
}
}
</script>

</head>
<body>
<table class="table1">
<tr><td>请输入第一个数:</td><td><input type="text" name="num1"/></td></tr>
<tr><td>请输入第二个数:</td><td><input type="text" name="num2"/></td></tr>
<tr>
<td>
<select name="oper">
<option value="+">+</option>
<option value="-">-</option>
<option value="*">*</option>
<option value="/">/</option>
</select>
</td>

<td ><input type="submit" value="计算" onclick="myCal()"></td></tr>
</table>

</body>
</html>

Ⅶ 基于Web的计算是什么意思

这是一种基于网络应用的架构类型.
以前应用较多的是C/S模式,即客户机/服务器模式,这是一种胖客户端形式,服务器端存储数据,客户端发送请求,完成大部分的运算.
现在应用较多的是B/S模式,即浏览器/服务器模式,这是一种瘦客户端模式.客户端发送请求,运算处理在服务器进行,然后将结果返回给客户端.这就是基于WEB计算的主要方式.

Ⅷ web前端javascript能实现什么算法或者计算

在Web开发中,JavaScript很重要,算法也很重要。下面整理了一下一些常见的算法在JavaScript下的实现,包括二分法、求字符串长度、数组去重、插入排序、选择排序、希尔排序、快速排序、冒泡法等等。仅仅是为了练手,不保证高效与美观,或许还有Bug,有时间再完善吧。

1.二分法:

function binary(items,value){

var startIndex=0,

stopIndex=items.length-1,

midlleIndex=(startIndex+stopIndex)>>>1;

while(items[middleIndex]!=value && startIndex

if(items[middleIndex]>value){

stopIndex=middleIndex-1;

}else{

startIndex=middleIndex+1;

}

middleIndex=(startIndex+stopIndex)>>>1;

}

return items[middleIndex]!=value ? false:true;

}

2.十六进制颜色值的随机生成:

function randomColor(){

var arrHex=["0","2","3","4","5","6","7","8","9","a","b","c","d"],

strHex="#",

index;

for(var i=0;i < 6; i++){

index=Math.round(Math.random()*15);

strHex+=arrHex[index];

}

return strHex;

}

一个求字符串长度的方法:

function GetBytes(str){

var len=str.length,

bytes=len;

for(var i=0;i < len;i++){

if(str.CharCodeAt>255){

bytes++;

}

}

return bytes;

}

3.js实现数组去重:

Array.protype.delRepeat=function(){

var newArray=new Array();

var len=this.length;

for(var i=0;i < len;i++){

for(var j=i+1;j < len;j++)

{

if(this[i]==this[j])

{

++i;

}

}

newArray.push(this[i]);

}

return newArray;

}

4.插入排序。所谓的插入排序,就是将序列中的第一个元素看成一个有序的子序列,然后不段向后比较交换比较交换。

function insertSort(arr){

var key;

for(var j = 1; j < arr.length ; j++){

//排好序的

var i = j - 1;

key = arr[j];

while(i >= 0 && arr[i] > key){

arr[i + 1] = arr[i];

i --;

}

arr[i + 1] = key;

}

return arr;

}

5.选择排序。其实基本的思想就是从待排序的数组中选择最小或者最大的,放在起始位置,然后从剩下的数组中选择最小或者最大的排在这公司数的后面。

function selectionSort(data)

{

var i, j, min, temp , count=data.length;

for(i = 0; i < count - 1; i++) {

/* find the minimum */

min = i;

for (j = i+1; j < count; j++)

{

if (data[j] < data[min])

{ min = j;}

}

/* swap data[i] and data[min] */

temp = data[i];

data[i] = data[min];

data[min] = temp;

}

return data;

}

6.希尔排序,也称递减增量排序算法。其实说到底也是插入排序的变种。

function shellSort(array){

var stepArr = [1750, 701, 301, 132, 57, 23, 10, 4, 1]; //
reverse()在维基上看到这个最优的步长较小数组

var i = 0;

var stepArrLength = stepArr.length;

var len = array.length;

var len2 = parseInt(len/2);

for(;i < stepArrLength; i++){

if(stepArr[i] > len2){

continue;

}

stepSort(stepArr[i]);

}

// 排序一个步长

function stepSort(step){

//console.log(step) 使用的步长统计

var i = 0, j = 0, f, tem, key;

var stepLen = len%step > 0 ? parseInt(len/step) + 1 : len/step;

for(;i < step; i++){// 依次循环列

for(j=1;/*j < stepLen && */step * j + i < len;
j++){//依次循环每列的每行

tem = f = step * j + i;

key = array[f];

while((tem-=step) >= 0){// 依次向上查找

if(array[tem] > key){

array[tem+step] = array[tem];

}else{

break;

}

}

array[tem + step ] = key;

}

}

}

return array;

}

7.快速排序。其实说到底快速排序算法就系对冒泡排序的一种改进,采用的就是算法理论中的分治递归的思想,说得明白点,它的做法就是:通过一趟排序将待排序的纪录分割成两部分,其中一部分的纪录值比另外一部分的纪录值要小,就可以继续分别对这两部分纪录进行排序;不段的递归实施上面两个操作,从而实现纪录值的排序。

function quickSort(arr,l,r){

if(l < r){

var mid=arr[parseInt((l+r)/2)],i=l-1,j=r+1;

while(true){

while(arr[++i] < mid);

while(arr[--j]>mid);

if(i>=j)break;

var temp=arr[i];

arr[i]=arr[j];

arr[j]=temp;

}

quickSort(arr,l,i-1);

quickSort(arr,j+1,r);

}

return arr;

}

8.冒泡法:

function bullSort(array){

var temp;

for(var i=0;i < array.length;i++)

{

for(var j=array.length-1;j > i;j--){

if(array[j] < array[j-1])

{

temp = array[j];

array[j]=array[j-1];

array[j-1]=temp;

}

}

}

return array;

}

Ⅸ java web如何实现复杂公式的计算问题

如果想纯页面端实现,使用JS计算。。。。。如果想JAVA,递交给后台的servlet或JSP计算。

Ⅹ 用JAVA应用程序或者Servelet做一个web计算器,比较急!!

import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;

public class Jisuanqi extends JFrame implements ActionListener {
Result result = new Result(); //定义text的面板
Number_Key number_key = new Number_Key(); //定义按钮面板
//当点击按钮+、-、*、/时,com = true
boolean com = false;

//当i=0时说明是我们第一次输入,字符串text不会累加
int i = 0;

//存放text的内容
String text = "";

//存放点击按钮+、-、*、/之前的数值
double defbutton = 0;

//+、-、*、/的代号分别为1,2,3,4
int symbol = 0;

//构造函数
Jisuanqi() {
super("WangJiao"); //设定标题
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设定关闭窗体时退出程序
JPanel pane = new JPanel(); //定义主面板

pane.setLayout(new BorderLayout());
setBounds(380,220,30,80); //前两个参数是在屏幕上显示的坐标,后两个是大小

//替换图标
ImageIcon icon=new ImageIcon(
Jisuanqi.class.getResource("APPLE.GIF")
);
setIconImage(icon.getImage());

pane.add(result, BorderLayout.NORTH);
pane.add(number_key, BorderLayout.CENTER);
pane.add(number_key.equal, BorderLayout.SOUTH);

number_key.one.addActionListener(this); //对1按钮添加监听事件
number_key.two.addActionListener(this); //对2按钮添加监听事件
number_key.three.addActionListener(this); //对3按钮添加监听事件
number_key.four.addActionListener(this); //对4按钮添加监听事件
number_key.five.addActionListener(this); //对5按钮添加监听事件
number_key.six.addActionListener(this); //对6按钮添加监听事件
number_key.seven.addActionListener(this); //对7按钮添加监听事件
number_key.eight.addActionListener(this); //对8按钮添加监听事件
number_key.nine.addActionListener(this); //对9按钮添加监听事件
number_key.zero.addActionListener(this); //对0按钮添加监听事件
number_key.ce.addActionListener(this); //对置零按钮添加监听事件
number_key.plus.addActionListener(this); //对+按钮添加监听事件
number_key.equal.addActionListener(this); //对=按钮添加监听事件
number_key.sub.addActionListener(this); //对-按钮添加监听事件
number_key.mul.addActionListener(this); //对*按钮添加监听事件
number_key.div.addActionListener(this); //对/按钮添加监听事件
number_key.point.addActionListener(this); //对.按钮添加监听事件

setContentPane(pane);
pack(); //初始化窗体大小为正好盛放所有按钮
}

//各个按钮触发的事件
public void actionPerformed(ActionEvent e) {

/*如果是点击数字按钮那么先要判断是否在此之前点击了+、-、*、/、=,如果是那么com=true
* 如果没有com= false;或者是否点击数字键,如果是i = 1,如果没有 i = 0;
**/
if (e.getSource() == number_key.one) {
if (com || i == 0) {
result.text.setText("1");
com = false;
i = 1;
} else {
text = result.text.getText();
result.text.setText(text + "1");
}
} else if (e.getSource() == number_key.two) {
if (com || i == 0) {
result.text.setText("2");
com = false;
i = 1;
} else {
text = result.text.getText();
result.text.setText(text + "2");
}

} else if (e.getSource() == number_key.three) {
if (com || i == 0) {
result.text.setText("3");
com = false;
i = 1;
} else {
text = result.text.getText();
result.text.setText(text + "3");
}
} else if (e.getSource() == number_key.four) {
if (com || i == 0) {
result.text.setText("4");
com = false;
i = 1;
} else {
text = result.text.getText();
result.text.setText(text + "4");
}
} else if (e.getSource() == number_key.five) {
if (com || i == 0) {
result.text.setText("5");
com = false;
i = 1;
} else {
text = result.text.getText();
result.text.setText(text + "5");
}
} else if (e.getSource() == number_key.six) {
if (com || i == 0) {
result.text.setText("6");
com = false;
i = 1;
} else {
text = result.text.getText();
result.text.setText(text + "6");
}
} else if (e.getSource() == number_key.seven) {
if (com || i == 0) {
result.text.setText("7");
com = false;
i = 1;
} else {
text = result.text.getText();
result.text.setText(text + "7");
}
} else if (e.getSource() == number_key.eight) {
if (com || i == 0) {
result.text.setText("8");
com = false;
i = 1;
} else {
text = result.text.getText();
result.text.setText(text + "8");
}
} else if (e.getSource() == number_key.nine) {
if (com || i == 0) {
result.text.setText("9");
com = false;
i = 1;
} else {
text = result.text.getText();
result.text.setText(text + "9");
}
}

/*对于0这个按钮有一定的说法,在我的程序里不会出现如00000这样的情况,我加了判断条件就是
* 如果text中的数值=0就要判断在这个数值中是否有.存在?如果有那么就在原来数值基础之上添
* 加0;否则保持原来的数值不变
*/
else if (e.getSource() == number_key.zero) { //result.text.getText()是得到text里内容的意思
if (com || i == 0) {
result.text.setText("0");
com = false;
i = 1;
} else {
text = result.text.getText();
if (Float.parseFloat(text) > 0 || Float.parseFloat(text) < 0) { //Float.parseFloat(text)就是类型转换了,下面都是一样
result.text.setText(text + "0");
} else {
if (text.trim().indexOf(".") == -1) {
result.text.setText(text);
} else {
result.text.setText(text + "0");
}
}
}
} else if (e.getSource() == number_key.ce) {
result.text.setText("0");
i = 0;
com = true;
}
/*本程序不会让一个数值中出现2个以上的小数点.具体做法是:判断是否已经存在.存在就不添加,
* 不存在就添加.
*/
else if (e.getSource() == number_key.point) {
if (com || i == 0) {
result.text.setText("0.");
com = false;
i = 1;
} else {
text = result.text.getText();
if (text.trim().indexOf(".") == -1) {
result.text.setText(text + ".");
} else {
result.text.setText(text);
}

}
} //获得点击+之前的数值
else if (e.getSource() == number_key.plus) {
com = true;
i = 0;
defbutton = Double.parseDouble(result.text.getText());
symbol = 1;
} //获得点击-之前的数值
else if (e.getSource() == number_key.sub) {
com = true;
i = 0;
defbutton = Double.parseDouble(result.text.getText());

symbol = 2;
} //获得点击*之前的数值
else if (e.getSource() == number_key.mul) {
com = true;
i = 0;
defbutton = Double.parseDouble(result.text.getText());
System.out.println(defbutton);
symbol = 3;
} //获得点击/之前的数值
else if (e.getSource() == number_key.div) {
com = true;
i = 0;
defbutton = Double.parseDouble(result.text.getText());
symbol = 4;
} else if (e.getSource() == number_key.equal) {

switch (symbol) {
case 1 : //计算加法
{
double ad =
defbutton + Double.parseDouble(result.text.getText());
result.text.setText(ad + "");
i = 0;
text = "";
break;
}
case 2 ://计算减法
{
double ad =
defbutton - Double.parseDouble(result.text.getText());
result.text.setText(String.valueOf(ad));
i = 0;
text = "";
break;
}
case 3 ://计算乘法
{
double ad =
defbutton * Double.parseDouble(result.text.getText());

result.text.setText(ad + "");
i = 0;
text = "";
break;
}
case 4 ://计算除法
{
double ad =
defbutton / Double.parseDouble(result.text.getText());
result.text.setText(ad + "");
i = 0;
text = "";
break;
}
}

System.out.println(com);
}
}

public static void main(String[] args) {
Jisuanqi loveyou = new Jisuanqi();
loveyou.show();
}
}

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

//计算器数字按钮定义面板
class Number_Key extends JPanel {

JButton zero = new JButton("0"); //数字键0
JButton one = new JButton("1"); //数字键1
JButton two = new JButton("2"); //数字键2
JButton three = new JButton("3"); //数字键3
JButton four = new JButton("4"); //数字键4
JButton five = new JButton("5"); //数字键5
JButton six = new JButton("6"); //数字键6
JButton seven = new JButton("7"); //数字键7
JButton eight = new JButton("8"); //数字键8
JButton nine = new JButton("9"); //数字键9

JButton plus = new JButton("+");
JButton sub = new JButton("-");
JButton mul = new JButton("*");
JButton div = new JButton("/");
JButton equal = new JButton("=");
JButton ce = new JButton("清零"); //置零键
JButton point = new JButton(".");

Number_Key() {
setLayout(new GridLayout(4, 4, 1, 1)); //定义布局管理器为网格布局

setBackground(Color.blue); //设置背景颜色
//添加按钮
add(one);
add(two);
add(three);
add(four);
add(five);
add(six);
add(seven);
add(eight);
add(nine);
add(zero);
add(plus);
add(sub);
add(mul);
add(div);
add(point);
add(equal);
add(ce);
}
}

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

//计算器显示结果的窗体
class Result extends JPanel {
//text先是输入和结果
JTextField text = new JTextField("0");

Result() { //讲输入的数字或得到的结果在text的右边显示
text.setHorizontalAlignment(SwingConstants.RIGHT);
text.enable(false); //文本框不能编辑
setLayout(new BorderLayout()); //设定布局管理器边框布局
add(text, BorderLayout.CENTER); //text放置在窗体的中间
}
}