码迷,mamicode.com
首页 > 其他好文 > 详细

自己写的计算器(加减乘除)代码

时间:2017-06-24 22:54:12      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:span   package   turn   sub   覆盖   imp   下标   test   tor   

首先是Calculator计算器类

package test;

public class Calculator {
    public int addition(int number1, int number2) {
        return number1+number2;
    }

    public int subtraction(int number1, int number2) {
        return number1-number2;
    }

    public int multiplication(int number1, int number2) {
        return number1*number2;
    }

    public int divsition(int number1, int number2) {
        return number1/number2;
    }
    
}

接下来是Execute运行类

package test;

import java.util.Scanner;

public class Execute {
    public static void main(String[] args) {
        System.out.println("请输入算术表达式");
        Scanner in = new Scanner(System.in);
        String expression = in.nextLine();
        expression=expression+"+1";
        System.out.println("内部字符串改变为"+expression);
        //初始化开始
        //
        char[] Cexpression=expression.toCharArray();
        //创建运算器
        Calculator calculator=new Calculator();
        //数值列表
        int[] numbers=new int[10];
        int numbersindex=0;
        //转型列表
        char[] sub=new char[10];
        //数值下标位置
        int count=0;
        //符号列表
        char[] symbols = new char[10];
        int symbolsindex=0;
        //temp1是数值列表上一个数值,temp2是当前的数值
        int temp1=0,temp2=0;;
        //符号
        char symbol = 0;
        int flag=1;
        //初始化结束
        //第一次遍历
        for (int i = 0; i < expression.length(); i++) {
            if(Cexpression[i]>=‘0‘&&sub[i]<=‘9‘){
                    sub[count++]=Cexpression[i];
            }else{
                //字符串转型整型
                temp2=transition(sub);
                //当flag=2时进行运算
                if(flag==2){
                    flag=1;
                    //获取数值列表前一个数值;
                    temp1=numbers[numbersindex-1];
                    //判断symbol乘法还是除法,成功是乘法,失败为除法
                    if(decide(symbol)){
                        
                        temp2=calculator.multiplication(temp2,temp1);
                    }else{
                        temp2=calculator.divsition(temp2,temp1);
                    }
                    //覆盖前一个数值
                    numbersindex--;
                }
                //temp2存入数值列表
                numbers[numbersindex++]=temp2;
                //获取符号
                symbol=Cexpression[i];
                //转型数值下标位置清零
                count=0;
                //判断是否大于flag,flag=2,不大于则加入到符号列表
                if(judge(symbol)>flag){
                    flag=2;
                }else{
                    //加入到符号列表
                    symbols[symbolsindex++]=symbol;
                }
                
            }
        }
        //输出数据结构
        System.out.println("输出数据结构");
        for(int i:numbers){
            System.out.print(i+" ");
        }
        System.out.println();
        for(char i:symbols){
            System.out.print(i);
        }
        System.out.println();
        
        
        
        int temp=numbers[0];
        count=0;
        for(int i=1;i<numbers.length;i++){
            if(symbols[count]==‘+‘){
                 temp+=numbers[i];
                 count++;
            }else if(symbols[count]==‘-‘){
                temp-=numbers[i];
                 count++;
            }
        }
        
        
        //输出最终结果
        System.out.println("结果为"+temp);
        
        //输出数据结构
        System.out.println("输出数据结构");
        for(int i:numbers){
            System.out.print(i+" ");
        }
        System.out.println();
        for(char i:symbols){
            System.out.print(i);
        }
        
    }
   
    private static int judge(char symbol) {
        if(symbol==‘+‘){
            return 1;
        }else if(symbol==‘-‘){
            return 1;
        }else if(symbol==‘*‘){
            return 2;
        }else if(symbol==‘/‘){
            return 2;
        }
        
        return 0;
    }

    private static boolean decide(char symbol) {
        if(symbol==‘*‘){
            return true;
        }else if(symbol==‘/‘){
            return false;
        }
        return false;
    }

    private static int transition(char[] sub) {
        int temp=0;
        for(int i=0;i<sub.length;i++){
            if(sub[i]>‘0‘&&sub[i]<‘9‘){
               temp=temp*10;
               temp+=(sub[i]-‘0‘);
            }    
        }
        return temp;
    }
}

代码还是很简单的,主要有两个列表,一个列表存数值,一个列表存符号,如果符号是乘法或者除法,则把当前的数值和数值列表最后的数值相乘或相除,然后覆盖到数字列表的最后,如果不是,则存入数值列表的最后,符号列表添加当前的减法或者乘法

自己写的计算器(加减乘除)代码

标签:span   package   turn   sub   覆盖   imp   下标   test   tor   

原文地址:http://www.cnblogs.com/kirohuji/p/7074596.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!