• 【实践】js实现简易的四则运算计算器


     最近看了一个大神推荐的某公司面试程序员的js 面试题,题目是用js 做一个计算器于是跟着大神的思想自己做了一下

     ps:功能还没有完善好毕竟自己还是一只菜鸟还在不断学习中。

    闲话不多说先上css代码

    <style type="text/css">
         *{
             padding: 0px;
             margin: 0px;
             border: 0px;
         }
         .wrapper{
             border: 5px solid #000;
             width: 300px;
             height: 400px;
             margin: 0 auto;
         }
         #screen,#result{
             width: 100%;
             height: 80px;
            border:1px solid red;
        }
        .allbtn input{
           display: inline-block;
           float: left;
           width: 75px;
           height: 47px;
           border: 1px solid #ccc;
        }
        #zeroWidth{
            width: 150px;
        }
        </style>

    html代码:

    这里我用了input标签把每一个计算器按键都做成了按钮,当按下按钮的时候获取按钮的value值从而运行计算

    id为 screen的div 是显示整个表达式的容器

    id 为result 的div 是显示最后结果的容器

    id为 allbtn的div 下面包裹着所有的运算符以及数字按钮

    <body>
        <div class="wrapper">
          <div id="screen"></div>
          <div id="result"></div>
          <div id="allbtn" class="allbtn">
                <input type="button" name="AC" id="clearall" value="AC">
                <input type="button" id="clear" name="clear" value="C">
                <input type="button" name="yushu" value="%">
                <input type="button" class ="calc" name="chu" value="/">
                <input type="button" class="num" name="seven" value="7">
                <input type="button" class="num" name="eight" value="8">
                <input type="button" class="num" name="nine" value="9">
                <input type="button" class="calc" name="chu" name="cheng" value="*">
                <input type="button" class="num" name="four" value="4">
                <input type="button" class="num" name="five" value="5">
                <input type="button" class="num" name="six" value="6">
                <input type="button" class="calc" name="chu" name="reduce" value="-">
                <input type="button" class="num" name="one" value="1">
                <input type="button" class="num" name="two" value="2">
                <input type="button" class="num" name="three" value="3">
                <input type="button" class="calc" name="chu" name="sum" value="+">
                <input class="num" id="zeroWidth" type="button" name="zero" value="0">
                <input type="button" class="num" name="point" value=".">
                <input type="button" id="finish" name="equal" value="=">
          </div>
        </div>

    下面是js 代码

    js 代码最核心的部分就是四则运算了

    <script type="text/javascript">
          window.onload = function(){
            var saveResult = new Array();//建立运算结果的数组
            var show = "";//显示屏显示的表达式
            var number = "";//定义一个临时变量 用来储存每一个整数
            var screen = document.getElementById('screen');//获取负责显示表达式的div
            var resultScreen = document.getElementById('result');//获取负责显示结果的div
              var allbtn = document.getElementById('allbtn');//获取按钮的外包裹层
              var input = allbtn.getElementsByTagName('input');//获取所有按钮
              var finish = document.getElementById('finish');//获取 "=" 按钮
              var clear = document.getElementById('clear');//获取清除按钮
              var clearall = document.getElementById('clearall');//获取 "AC" 按钮
              var numArray = new Array();//储存数字数组
              var calcArray = new Array();//储存运算符数组
            var a = 0;//循环初始化变量
            var b = 0;//循环初始化变量
            var flag = false;//判断是否按过等于符号
            
    
            //获取所有数字按钮
            for (var i = 0; i < input.length; i++) {
                if(input[i].className == "num"){
                    numArray.push(input[i]);
                }
            }
            console.log(numArray);
    
            //获取所有操作符按钮
            for (var j = 0; j < input.length; j++) {
                if(input[j].className == "calc"){
                    calcArray.push(input[j]);
                }
            }
            console.log(calcArray);
            //--------------------------------------准备工作完成--------------------------------------
            //
            //
            //
            //
            //--------------------------------------以下是操作部分------------------------------------------
    
    
            //数字键点击事件
            for (var x = 0; x < numArray.length; x++) {
                numArray[x].onclick = function(){
                    if (flag == true) {
                        saveResult.splice(0,saveResult.length);
                        number = "";
                        show = "";
                        flag = false;
                    }
                    var value = this.getAttribute("value");
                    show += value;
                    screen.innerHTML = show;
                    number += value;
                    console.log("点击数字的时候x的值为:" + number);
                    
                }
    
            }
            
            //运算符点击事件
            for (var y = 0; y < calcArray.length; y++) {
                calcArray[y].onclick = function(){
                    var value = this.getAttribute("value");
                    show += value;
                    screen.innerHTML = show;
                    saveResult.push(number);
                    //运算符一点击x变量里面的值就会存进去数组里面
                    //这样确保数字能够保持完整性
                    saveResult.push(value);
                    number = "";//然后清空变量number 下次再次存入数字
                    console.log(saveResult);
                }
            }
    
            
    
            //等于符号点击事件
            finish.onclick = function(){
               saveResult.push(number);
               number = "";
               while(a < saveResult.length){
                  
    
                     if(saveResult[a] == "*"){
                          var result = parseFloat(saveResult[a - 1]) * parseFloat(saveResult[a + 1]);
                          saveResult.splice(a-1,3,result);
                          a = 0;
                     }else if(saveResult[a] == "/"){
                          var result = parseFloat(saveResult[a - 1]) / parseFloat(saveResult[a + 1]);
                          saveResult.splice(a-1,3,result);
                          a = 0;
                     }
                  a++;
    
               }
    
               while(b < saveResult.length){
                  
    
                     if(saveResult[b] == "+"){
                          var result = parseFloat(saveResult[b - 1]) + parseFloat(saveResult[b + 1]);
                          saveResult.splice(b-1,3,result);
                          b = 0;
                     }else if(saveResult[b] == "-"){
                          var result = parseFloat(saveResult[b - 1]) - parseFloat(saveResult[b + 1]);
                          saveResult.splice(b-1,3,result);
                          b = 0;
                     }
                  b++;
    
               }
               resultScreen.innerHTML = saveResult;
               flag = true;
               console.log("最终数组输出" + saveResult);
              
                
          }
          
    
          //AC 按钮点击事件
          clearall.onclick = function(){
              saveResult.splice(0,saveResult.length);
            number = "";
            show = "";
            screen.innerHTML = "";
          }
        }
    
        </script>

    这里说说四则元算:

    本次实现四则元素的核心是使用数组,那怎么实现呢?遍历

    我这里用了while 循环当然用for 也是可以的 核心的思想是 我先遍历一次数组 如果遍历到有元素是 * 或者 / 那么我就把它所在位置的前一个元素和后一个元素执行乘或除运算(前一个元素和后一个元素要用parseFloat转型方便日后有小数点运算)然后再用splice方法,把这三个元素替换成运算后的结果,然后自增变量 a重新赋值为0,再重新执行一次遍历如此类推直到没有了 * 或 / 号

    之后再执行第二次遍历,方法也是如此最后把数组saveResult输出到 结果div 中

  • 相关阅读:
    Linux安装Oracle 10g
    Linux安装Oracle 10g
    如何利用BI实现人力资源可视化管理
    mongdb修改密码
    如何利用BI实现人力资源可视化管理
    jquery获取浏览器和屏幕的高度和宽度
    perl概述
    'CheckLicensesAndNotify' has encountered a problem.
    Caused by: java.sql.SQLException: The MySQL server is running with the --read-only option so it cann
    Caused by: java.sql.SQLException: Value '0000-00-00 00:00:00' can not be represented as java.sql.Tim
  • 原文地址:https://www.cnblogs.com/stitchgogo/p/6081245.html
Copyright © 2020-2023  润新知