91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 12KB
    文件類型: .java
    金幣: 1
    下載: 0 次
    發(fā)布日期: 2021-06-11
  • 語言: Java
  • 標簽: Java??Swing??計算器????

資源簡介

/** * Java計算器 * chishaxie * 支持中綴表達式運算(可以算一個很長的數(shù)學(xué)表達式) * 支持高精度浮點數(shù)運算 * 支持按鈕和鍵盤同步監(jiān)聽 * 支持錯誤處理并提示 */ 可以試試算65535的階乘啰(等待1分鐘左右)

資源截圖

代碼片段和文件信息

/**
?*?Java計算器
?*?chishaxie
?*?支持中綴表達式運算
?*?支持高精度浮點數(shù)運算
?*?支持按鈕和鍵盤同步監(jiān)聽
?*?支持錯誤處理并提示
?*/
import?java.awt.BorderLayout;
import?java.awt.Color;
import?java.awt.Container;
import?java.awt.GridLayout;
import?java.awt.event.ActionEvent;
import?java.awt.event.ActionListener;
import?java.awt.event.KeyEvent;
import?java.awt.event.KeyListener;
import?java.math.BigDecimal;
import?java.math.BigInteger;
import?java.math.RoundingMode;
import?java.util.Stack;
import?java.util.StringTokenizer;

import?javax.swing.JButton;
import?javax.swing.Jframe;
import?javax.swing.JLabel;
import?javax.swing.JOptionPane;
import?javax.swing.JPanel;
import?javax.swing.JScrollPane;
import?javax.swing.JTextArea;
import?javax.swing.border.LineBorder;

/**
?*?計算器引擎類(抽象類)
?*?提供中綴表達式的計算功能
?*?支持高精度浮點數(shù)
?*?運算過程出現(xiàn)循環(huán)小數(shù)只處理至其小數(shù)點后15位
?*?@author?chishaxie
?*?@throws?Exception?計算過程中出現(xiàn)錯誤
?*/
abstract?class?CalculatorEngine?{

/**
?*?運算符優(yōu)先級判斷
?*?@param?op?運算符或者‘(’或者‘=’
?*?@return?優(yōu)先級(最高4,最低0)
?*/
static?private?int?Precedence(char?op)
{
switch?(op)?{
case?‘+‘:
case?‘-‘:
return?1;?//?定義加減運算的優(yōu)先級為1
case?‘*‘:
case?‘/‘:
case?‘%‘:
return?2;?//?定義乘除與取余運算的優(yōu)先級為2
case?‘^‘:
return?3;?//?定義次方運算的優(yōu)先級為3
case?‘!‘:
return?4;?//?定義階乘運算的優(yōu)先級為4
case?‘(‘:
case?‘=‘:
default:
return?0;?//?定義在棧中的左括號和棧底字符的優(yōu)先級為0
}
}

/**
?*?中綴表達式轉(zhuǎn)換后綴表達式
?*?@param?str?中綴表達式字符串(要求以=結(jié)尾)
?*?@return?后綴表達式的字符串形式
?*?@throws?Exception?中綴表達式存在錯誤
?*/
static?private?String?toSuffix(String?str)?throws?Exception?{
StringBuffer?strBuf?=?new?StringBuffer();//?存儲后綴表達式
Stack?stack?=?new?Stack();//?字符棧,用于處理運算符
stack.push(‘=‘);//?壓入棧底字符
int?i?=?0;//?中綴式字符串迭代器
if(str==null?||?str.equals(““)?||?str.equals(“=“))
throw?new?Exception(“中綴式不能為空“);
char?ch?=?str.charAt(i);//?臨時字符處理
if(ch==‘.‘)
throw?new?Exception(“中綴式格式不規(guī)范(不能以“.”開頭)“);
if?(str.charAt(str.length()?-?1)?!=?‘=‘)
throw?new?Exception(“中綴式格式不規(guī)范(不以“=”結(jié)尾)“);
if(ch==‘-‘?||?ch==‘+‘)
strBuf.append(“0?“);//正負號首位補零
while?(ch?!=?‘=‘)?{
if?(ch?==?‘?‘)
ch?=?str.charAt(++i);//?讀取下一個字符(忽略空格)
else?if?(ch?==?‘(‘)?{
stack.push(‘(‘);//?如果是左括號將其壓入棧
ch?=?str.charAt(++i);
if(ch==‘-‘?||?ch==‘+‘)
strBuf.append(“0?“);//正負號補零
}?else?if?(ch?==?‘)‘)?{
while?(stack.peek()?!=?‘(‘)?{
if?(stack.peek()?==?‘=‘)
throw?new?Exception(“括號不匹配缺少“(”“);
strBuf.append(stack.pop());
}
stack.pop();
ch?=?str.charAt(++i);
}?else?if?(ch?==?‘+‘?||?ch?==?‘-‘?||?ch?==?‘*‘?||?ch?==?‘/‘?||?ch==‘^‘?||?ch==‘!‘?||?ch==‘%‘)?{
char?w?=?stack.peek();//?臨時讀取棧中的運算符
//?將現(xiàn)在的運算符和棧中的運算符進行優(yōu)先級比較
while?(Precedence(w)?>=?Precedence(ch))?{
strBuf.append(w);
stack.pop();
w?=?stack.peek();
}
stack.push(ch);
ch?=?str.charAt(++i);
}?else?{
//?直接將數(shù)字和小數(shù)點加到后綴式中
if?(!((ch?>=?‘0‘?&&?ch?<=?‘9‘)?||?ch?==?‘.‘))
throw?new?Exception(“出現(xiàn)非法符號“);

評論

共有 條評論