Ⅰ 【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放置在窗體的中間
}
}