欧美成人午夜免费全部完,亚洲午夜福利精品久久,а√最新版在线天堂,另类亚洲综合区图片小说区,亚洲欧美日韩精品色xxx

扣丁學(xué)堂Java培訓(xùn)之實(shí)現(xiàn)簡易計算器完整代碼

2018-01-23 11:14:10 1406瀏覽

今天扣丁學(xué)堂給介紹一下關(guān)于一款用Java語言寫的簡易計算器,希望對最近學(xué)習(xí)java的編程同學(xué)有所幫助,它可以實(shí)現(xiàn)基本的運(yùn)算,測試目前無bug,下面我們一起來看下吧。



首先界面:

整個面板用了BorderLayout布局,分為北,左和中。中部采用網(wǎng)格布局。定義這個類位CalFrame.Java:

packagecom.example.java;

importjava.awt.BorderLayout;

importjava.awt.Color;

importjava.awt.Dimension;

importjava.awt.GridLayout;

importjava.awt.event.ActionEvent;

importjava.awt.event.ActionListener;

importjava.util.Arrays;

importjavax.swing.JButton;

importjavax.swing.JFrame;

importjavax.swing.JPanel;

importjavax.swing.JTextField;

publicclassCalFrameextendsJFrame{

/**

*計算器的外觀設(shè)計

*/

privatestaticfinallongserialVersionUID=1L;

privatestaticfinalintPRE_WIDTH=500;

privatestaticfinalintPRE_HEIGHT=400;

privateJTextFieldtext=null;

privateJButtonbutton=null;//存儲標(biāo)記

privateString[]nOp={"7","8","9","/","sqrt","4","5","6","*","%","1","2","3","-","1/x","0","+/-",".","+","="};

privateString[]mOp={"MC","MR","MS","M+"};

privateString[]rOp={"Back","CE","C"};

privateCalServiceservice=newCalService();

publicCalFrame(){

this.setTitle("計算器");

this.setSize(PRE_WIDTH,PRE_HEIGHT);

this.setLocationRelativeTo(null);

this.setResizable(false);

//添加底層

JPanelpanel=newJPanel();

panel.setLayout(newBorderLayout(10,1));

panel.add(getTextField(),BorderLayout.NORTH);

panel.setPreferredSize(newDimension(PRE_WIDTH,PRE_HEIGHT));

//west

JButton[]mButton=getMButton();

JPanelpanel1=newJPanel();

panel1.setLayout(newGridLayout(5,1,0,5));

for(JButtonjButton:mButton){

panel1.add(jButton);

}

panel.add(panel1,BorderLayout.WEST);

JButton[]rButton=getRButton();

JPanelpanel2=newJPanel();

panel2.setLayout(newBorderLayout(1,5));

JPanelpanel21=newJPanel();

panel21.setLayout(newGridLayout(1,3,3,3));

for(JButtonjButton:rButton){

panel21.add(jButton);

}

panel2.add(panel21,BorderLayout.NORTH);

JButton[]nButton=getNButton();

JPanelpanel3=newJPanel();

panel3.setLayout(newGridLayout(4,5,3,5));

for(JButtonjButton:nButton){

panel3.add(jButton);

}

panel2.add(panel3,BorderLayout.CENTER);

panel.add(panel2,BorderLayout.CENTER);

this.add(panel);

this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

this.setVisible(true);

}

//返回數(shù)字鍵

privateJButton[]getNButton(){

String[]redButton={"/","*","-","+","="};

JButton[]nbutton=newJButton[nOp.length];

for(inti=0;i<nOp.length;i++){

JButtonb=newJButton(this.nOp[i]);

b.addActionListener(getActionListener());

Arrays.sort(redButton);

if(Arrays.binarySearch(redButton,nOp[i])>=0){

b.setForeground(Color.red);

}else{

b.setForeground(Color.blue);

}

nbutton[i]=b;

}

returnnbutton;

}

privateJButton[]getRButton(){

JButton[]rButton=newJButton[rOp.length];

for(inti=0;i<rOp.length;i++){

JButtonb=newJButton(this.rOp[i]);

b.addActionListener(getActionListener());

b.setForeground(Color.red);

rButton[i]=b;

}

returnrButton;

}

//返回操作健

privateJButton[]getMButton(){

JButton[]mbutton=newJButton[mOp.length+1];

mbutton[0]=getButton();

for(inti=0;i<this.mOp.length;i++){

JButtonb=newJButton(this.mOp[i]);

b.addActionListener(getActionListener());

b.setForeground(Color.red);

mbutton[i+1]=b;

}

returnmbutton;

}

privateActionListenergetActionListener(){

ActionListeneractionListener=newActionListener(){

@Override

publicvoidactionPerformed(ActionEvente){

Stringcmd=e.getActionCommand();

Stringresult=null;

try{

result=service.callMethod(cmd,text.getText());

}catch(Exceptione2){

System.out.println(e2.getMessage());

}

if(cmd.indexOf("MC")==0){

button.setText("");

}elseif(cmd.indexOf("M")==0){

button.setText("M");

}

//顯示計算結(jié)果

if(result!=null){

text.setText(result);

}

}

};

returnactionListener;

}

privateJButtongetButton(){

button=newJButton();

returnbutton;

}

//返回顯示框

publicJTextFieldgetTextField(){

text=newJTextField("0",10);

returntext;

}

publicstaticvoidmain(String[]args){

newCalFrame();

}

}

接著實(shí)現(xiàn)幾個基本的操作,加,減,乘,除??紤]到精度和范圍的問題.我們定義了一個MyMath類,數(shù)據(jù)格式使用BigDecimal對象,進(jìn)行計算。MyMath.java:

packagecom.example.java;

importjava.math.BigDecimal;

publicclassMyMath{

publicstaticdoubleadd(doublenum1,doublenum2){

BigDecimalfirst=getBigDecimal(num1);

BigDecimalsecond=getBigDecimal(num2);

returnfirst.add(second).doubleValue();

}

publicstaticdoubledivide(doublenum1,doublenum2){

BigDecimalfirst=getBigDecimal(num1);

BigDecimalsecond=getBigDecimal(num2);

returnfirst.divide(second,3,BigDecimal.ROUND_HALF_UP).doubleValue();

}

publicstaticdoublemultiply(doublenum1,doublenum2){

BigDecimalfirst=getBigDecimal(num1);

BigDecimalsecond=getBigDecimal(num2);

returnfirst.multiply(second).doubleValue();

}

publicstaticdoublesubtract(doublenum1,doublenum2){

BigDecimalfirst=getBigDecimal(num1);

BigDecimalsecond=getBigDecimal(num2);

returnfirst.subtract(second).doubleValue();

}

/**

*為一個double類型創(chuàng)建BigDecimal對象

*@paramnumber

*@return

*/

privatestaticBigDecimalgetBigDecimal(doublenumber){

returnnewBigDecimal(number);

}

123456789101112131415161718192021222324252627282930313233343536373839

}

最后處理按鈕的事件,我們定義了一個CalService類處理業(yè)務(wù)邏輯:

packagecom.example.java;

/**

*處理業(yè)務(wù)邏輯

*@authorl

*

*/

publicclassCalService{

privatebooleanisSecondNum=false;

privateStringlastOp;

privateStringfirstNum="0";

privateStringsecondNum="null";

privatedoublestore;

privateStringnumString="0123456789.";

privateStringopString="+-*/";

publicStringcallMethod(Stringcmd,Stringtext){

if(cmd.equals("C")){

returncleanAll();

}elseif(cmd.equals("CE")){

returnclear(text);

}elseif(cmd.equals("Back")){

returnbackSpace(text);

}elseif(numString.indexOf(cmd)!=-1){

returncatNum(cmd,text);

}elseif(opString.indexOf(cmd)!=-1){

returnsetOp(cmd,text);

}elseif(cmd.equals("+/-")){

returnsetNegative(text);

}elseif(cmd.equals("1/x")){

returnsetReciprocal(text);

}elseif(cmd.equals("sqrt")){

returnsqrt(text);

}elseif(cmd.equals("%")){

returncal(text,true);

}elseif(cmd.equals("=")){

returncal(text,false);

}else{

returnmCmd(cmd,text);

}

}

privateStringcleanAll(){

this.firstNum="0";

this.secondNum=null;

returnthis.firstNum;

}

privateStringclear(Stringtext){

return"0";

}

privateStringbackSpace(Stringtext){

returntext.equals("0")||text.equals("")?"0":text.substring(0,text.length()-1);

}

privateStringcatNum(Stringcmd,Stringtext){

Stringresult=cmd;

//如果text不等于0

if(!"0".equals(text)){

if(isSecondNum){

isSecondNum=false;

}else{

result=text+cmd;

}

}

if(result.indexOf(".")==0){

result="0"+result;

}

returnresult;

}

privateStringsetOp(Stringcmd,Stringtext){

this.lastOp=cmd;

this.firstNum=text;

this.secondNum=null;

this.isSecondNum=true;

returnnull;

}

privateStringsetNegative(Stringtext){

if(text.indexOf("-")==0){

returntext.substring(1,text.length());

}else{

return"-"+text;

}

}

//求倒數(shù)

privateStringsetReciprocal(Stringtext){

if(text.equals("0")){

returntext;

}else{

this.isSecondNum=true;

returnString.valueOf(MyMath.divide(1,Double.valueOf(text)));

}

}

//求開方

privateStringsqrt(Stringtext){

this.isSecondNum=true;

returnString.valueOf(Math.sqrt(Double.valueOf(text)));

}

privateStringcal(Stringtext,booleanisPercent){

doublesecondResult=secondNum==null?Double.valueOf(text).doubleValue():Double.valueOf(secondNum).doubleValue();

//除數(shù)為0

if(secondResult==0&&this.lastOp.equals("/")){

return"0";

}

//有%

if(isPercent){

secondResult=MyMath.multiply(Double.valueOf(firstNum),MyMath.divide(secondResult,100));

}

if(this.lastOp.equals("+")){

firstNum=String.valueOf(MyMath.add(Double.valueOf(firstNum),secondResult));

}elseif(this.lastOp.equals("-")){

firstNum=String.valueOf(MyMath.subtract(Double.valueOf(firstNum),secondResult));

}elseif(this.lastOp.equals("*")){

firstNum=String.valueOf(MyMath.multiply(Double.valueOf(firstNum),secondResult));

}elseif(this.lastOp.equals("/")){

firstNum=String.valueOf(MyMath.divide(Double.valueOf(firstNum),secondResult));

}

secondNum=secondNum==null?text:secondNum;

this.isSecondNum=true;

returnfirstNum;

}

//存儲

privateStringmCmd(Stringcmd,Stringtext){

if(cmd.equals("M+")){

store=MyMath.add(store,Double.valueOf(text));

}elseif(cmd.equals("MC")){

store=0;

}elseif(cmd.equals("MR")){

isSecondNum=true;

returnString.valueOf(store);

}elseif(cmd.equals("MS")){

store=Double.valueOf(text).doubleValue();

}

returnnull;

}

}

最后的calMethod方法大量使用ifelse判斷不是好的實(shí)現(xiàn)方法,感興趣的可以看看java的設(shè)計模式,消除這樣的判斷。最后想要了解更多關(guān)于Java發(fā)展前景趨勢,請關(guān)注扣丁學(xué)堂Java培訓(xùn)官網(wǎng)、微信等平臺,扣丁學(xué)堂IT職業(yè)在線學(xué)習(xí)教育平臺為您提供權(quán)威的Java視頻教程系統(tǒng),通過千鋒扣丁學(xué)堂金牌講師在線錄制的Java在線視頻課程,讓你快速掌握J(rèn)ava從入門到精通開發(fā)實(shí)戰(zhàn)技能。



扣丁學(xué)堂微信公眾號



關(guān)注微信公眾號獲取更多學(xué)習(xí)資料



查看更多關(guān)于“Java開發(fā)資訊的相關(guān)文章>>

標(biāo)簽: JavaEE視頻教程 JavaEE培訓(xùn) JavaEE開發(fā)工程師 Java培訓(xùn)

熱門專區(qū)

暫無熱門資訊

課程推薦

微信
微博
15311698296

全國免費(fèi)咨詢熱線

郵箱:codingke@1000phone.com

官方群:148715490

北京千鋒互聯(lián)科技有限公司版權(quán)所有   北京市海淀區(qū)寶盛北里西區(qū)28號中關(guān)村智誠科創(chuàng)大廈4層
京ICP備2021002079號-2   Copyright ? 2017 - 2022
返回頂部 返回頂部