你自己研究下,这个代码,别人写的:
10余年专注成都网站制作,企业网站建设,个人网站制作服务,为大家分享网站制作知识、方案,网站设计流程、步骤,成功服务上千家企业。为您提供网站建设,网站制作,网页设计及定制高端网站建设服务,专注于企业网站建设,高端网页制作,对石凉亭等多个领域,拥有丰富的网站设计经验。
import java.util.Scanner;
public class T {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//String str = "54151+819*5165+15-48/189+5961";
System.out.println("请输入算式,按回车键结束:");
String str = scan.nextLine();
System.out.println(cacComplex(str));
}
private static double cacComplex(String str) {
if (str.equals(""))
return 0;
System.out.println("CAC:" + str);
str = str.replaceAll("[\\[\\{]", "(").replaceAll("[\\]\\}]", ")");
int cl = str.lastIndexOf('(');
if (cl == -1)
return cac(str);
int cr = str.indexOf(')', cl);
String left = str.substring(0, cl);
String right = str.substring(cr + 1);
String middle = str.substring(cl + 1, cr);
return cacComplex(left + cac(middle) + right);
}
public static double cac(String str) {
if (str.equals(""))
return 0;
int ml = str.indexOf('*');
int dl = str.indexOf('/');
if (ml == -1 dl == -1) {
return cacNoMD(str);
}
int index = ml == -1 ? dl : ml;
// 4+5*6*7+8
String left = str.substring(0, index);// 4+5
String m1 = lastNumber(left);
left = left.substring(0, left.length() - m1.length());
String right = str.substring(index + 1);// 6*7+8
String m2 = firstNumber(right);// m2:6
right = right.substring(m2.length());// *7+8
double d1 = Double.parseDouble(m1);
double d2 = Double.parseDouble(m2);
double tmp = 0;
if (index == ml) {
tmp = d1 * d2;
} else if (index == dl) {
tmp = d1 / d2;
}
return cac(left + tmp + right);
}
private static String lastNumber(String str) {
StringBuilder sb = new StringBuilder();
for (int i = str.length() - 1; i = 0; i--) {
char c = str.charAt(i);
if (!Character.isDigit(c) c != '.')
break;
sb.append(c);
}
return sb.reverse().toString();
}
private static String firstNumber(String str) {
StringBuilder sb = new StringBuilder();
for (char c : str.toCharArray()) {
if (!Character.isDigit(c) c != '.')
break;
sb.append(c);
}
return sb.toString();
}
private static double cacNoMD(String str) {
double ret = 0;
StringBuilder sb = new StringBuilder();
char sign = '+';
for (char c : (str + "+").toCharArray()) {
if (!Character.isDigit(c) c != '.') {
if (sb.length() == 0)
continue;
double tmp = Double.parseDouble(sb.toString());
if (sign == '+') {
ret += tmp;
} else {
ret -= tmp;
}
sb = new StringBuilder();
sign = c;
} else {
sb.append(c);
}
}
return ret;
}
}
请输入算式,按回车键结束:
54151+819*5165+15-48/189+5961
CAC:54151+819*5165+15-48/189+5961
4290261.746031746
然后 通过输入 显示结果,比如说:
以下是上图计算器的代码:
package Computer;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Stack;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Count extends JApplet implements ActionListener
{
/**
*
*/
private static final long serialVersionUID = 1L;
private JTextField textField = new JTextField("请输入");
String operator = "";//操作
String input = "";//输入的 式子
boolean flag = true;
// boolean flag1 = true;
// boolean flag2 = true;
public void init()//覆写Applet里边的init方法
{
Container C = getContentPane();
JButton b[] = new JButton[16];
JPanel panel = new JPanel();
C.add(textField, BorderLayout.NORTH);
C.add(panel,BorderLayout.CENTER);
panel.setLayout(new GridLayout(4, 4,5,5));
String name[]={"7","8","9","+","4","5","6","-","1","2","3","*","0","C","=","/"};//设置 按钮
for(int i=0;i16;i++)//添加按钮
{
b[i] = new JButton(name[i]);
b[i].setBackground(new Color(192,192,192));
b[i].setForeground(Color.BLUE);//数字键 设置为 蓝颜色
if(i%4==3)
b[i].setForeground(Color.RED);
b[i].setFont(new Font("宋体",Font.PLAIN,16));//设置字体格式
panel.add(b[i]);
b[i].addActionListener(this);
}
b[13].setForeground(Color.RED);//非数字键,即运算键设置为红颜色
b[13].setForeground(Color.RED);
}
public void actionPerformed(ActionEvent e)
{
int cnt = 0;
String actionCommand = e.getActionCommand();
if(actionCommand.equals("+")||actionCommand.equals("-")||actionCommand.equals("*") ||actionCommand.equals("/"))
input +=" "+actionCommand+" ";//设置输入,把输入的样式改成 需要的样子
else if(actionCommand.equals("C"))
input = "";
else if(actionCommand.equals("="))//当监听到等号时,则处理 input
{
input+= "="+compute(input);
textField.setText(input);
input="";
cnt = 1;
}
else
input += actionCommand;//数字为了避免多位数的输入 不需要加空格
if(cnt==0)
textField.setText(input);
}
private String compute(String input)//即1237 的 样例
{
String str[];
str = input.split(" ");
StackDouble s = new StackDouble();
double m = Double.parseDouble(str[0]);
s.push(m);
for(int i=1;istr.length;i++)
{
if(i%2==1)
{
if(str[i].compareTo("+")==0)
{
double help = Double.parseDouble(str[i+1]);
s.push(help);
}
if(str[i].compareTo("-")==0)
{
double help = Double.parseDouble(str[i+1]);
s.push(-help);
}
if(str[i].compareTo("*")==0)
{
double help = Double.parseDouble(str[i+1]);
double ans = s.peek();//取出栈顶元素
s.pop();//消栈
ans*=help;
s.push(ans);
}
if(str[i].compareTo("/")==0)
{
double help = Double.parseDouble(str[i+1]);
double ans = s.peek();
s.pop();
ans/=help;
s.push(ans);
}
}
}
double ans = 0d;
while(!s.isEmpty())
{
ans+=s.peek();
s.pop();
}
String result = String.valueOf(ans);
return result;
}
public static void main(String args[])
{
JFrame frame = new JFrame("Count");
Count applet = new Count();
frame.getContentPane().add(applet, BorderLayout.CENTER);
applet.init();//applet的init方法
applet.start();//线程开始
frame.setSize(350, 400);//设置窗口大小
frame.setVisible(true);//设置窗口可见
}
}
不太完善,你再加点输入的逻辑判断什么的,这个演示只能输入正确的数据才能运行,否则会报错,仅供参考。(求采纳啊)
public class C {
static Double rs;
public static Double yunsuan(String r,Double a1, Double a2){
Double result;
if(r.equals("+")){
result=a1+a2;
System.out.println("运算结果为:"+result);
}else if(r.equals("-")){
result=a1-a2;
System.out.println("运算结果为:"+result);
}else if(r.equals("*")){
result=a1*a2;
System.out.println("运算结果为:"+result);
}else if(r.equals("/")){
result=a1/a2;
System.out.println("运算结果为:"+result);
}else{
result=a1*a2;
System.out.println("运算结果为:"+result);
}
return result;
}
public static void main(String[] args) {
int ss=0;
while(ss==0){
Scanner scan=new Scanner(System.in);
System.out.println("请输入第一个数:");
Double a1=scan.nextDouble();
System.out.println("请输入运算符(+、-、*、/、%):");
String r=scan.next();
System.out.println("请输入第二个数:");
Double a2=scan.nextDouble();
rs=yunsuan(r,a1,a2);
System.out.println("请输入指令(继续运算/新的运算/结束运算)");
String ff=scan.next();
if(ff.equals("继续运算")){
System.out.println("请输入运算符(+、-、*、/、%):");
r=scan.next();
System.out.println("请输入第二个数:");
Double a3=scan.nextDouble();
rs=yunsuan(r,rs,a3);
System.out.println("请输入指令(继续运算/新的运算/结束运算)");
ff=scan.next();
}else if(ff.equals("新的运算")){
continue;
}else{
ss=1;
}
}
}
}