最近看了一个大神推荐的某公司面试程序员的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 中

【实践】js实现简易的四则运算计算器的更多相关文章

  1. java 24 - 8 GUI之创建四则运算计算器(未校验版)

    这个是用NetBeans软件制作的,因为这个软件制作GUI任务比较方便 通过拖拽控件生成的窗体:(红色的名称是更改后的控件名称) 拉拽好布局后,要进行的步骤: A:更改想要进行操作的控件的名称(右键控 ...

  2. 使用html+css+js实现简易计算器

    使用html+css+js实现简易计算器, 效果图如下: html代码如下: <!DOCTYPE html> <html lang="en"> <he ...

  3. 项目:JS实现简易计算器案例

    组件化网页开发下的: 步骤一:让页面动起来的JavaScript深入讲解  的 项目:JS实现简易计算器案例

  4. 深入浅出数据结构C语言版(8)——后缀表达式、栈与四则运算计算器

    在深入浅出数据结构(7)的末尾,我们提到了栈可以用于实现计算器,并且我们给出了存储表达式的数据结构(结构体及该结构体组成的数组),如下: //SIZE用于多个场合,如栈的大小.表达式数组的大小 #de ...

  5. JS——制作简单的网页计算器

    用JS做了一个简易的网页计算器 <!DOCTYPE html> <html lang="en"> <head> <meta charset ...

  6. 利用ANTLR4实现一个简单的四则运算计算器

    利用ANTLR4实现一个简单的四则运算计算器 ANTLR4介绍 ANTLR能够自动地帮助你完成词法分析和语法分析的工作, 免去了手写去写词法分析器和语法分析器的麻烦 它是基于LL(k)的, 以递归下降 ...

  7. JS实现一个简单的计算器

    使用JS完成一个简单的计算器功能.实现2个输入框中输入整数后,点击第三个输入框能给出2个整数的加减乘除.效果如上: 第一步: 创建构建运算函数count(). 第二步: 获取两个输入框中的值和获取选择 ...

  8. 使用Node.js实现简易MVC框架

    在使用Node.js搭建静态资源服务器一文中我们完成了服务器对静态资源请求的处理,但并未涉及动态请求,目前还无法根据客户端发出的不同请求而返回个性化的内容.单靠静态资源岂能撑得起这些复杂的网站应用,本 ...

  9. [转] 使用Node.js实现简易MVC框架

    在使用Node.js搭建静态资源服务器一文中我们完成了服务器对静态资源请求的处理,但并未涉及动态请求,目前还无法根据客户端发出的不同请求而返回个性化的内容.单靠静态资源岂能撑得起这些复杂的网站应用,本 ...

随机推荐

  1. css实现水平垂直居中

    一.单行文字居中: height: 100px;height: 100px;overflow: hidden; 二.多行内容居中(容器的高度不能固定): padding-top: 24px;paddi ...

  2. C++ 画星号图形——空心梯形(核心代码记录)

    b=a; ;c<=a;c++) { ;d<=a-c;d++) printf(" "); ;e<=b;e++) ||c==a) printf("*&quo ...

  3. bootstrap 3 中表单元素的写法 ---- 重点是 input file 元素的

    我们知道file元素,因为有许多的插件可以使用,往往我们不需要写样式,但是如果要求我们自己写样式(利用bootstrap 3)实现一个file极简样式如何写呢? 下面我们先来看看整个表单的样子! 重点 ...

  4. 一起来做chrome扩展《AJAX请求》

    chrome在一次更新之后,出于安全考虑,完全的禁止了content_script从https向http发起ajax请求,即使正常情况下也会在console里给出提示.这对于WEB来讲是好事,但对于扩 ...

  5. python学习道路(day12note)(mysql操作,python链接mysql,redis)

    1,针对mysql操作 SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass'); 设置密码 update user set password ...

  6. SQL Server 性能调优之--tempdb 之存放路径

    在我们的OLAP的实现中,SQL超级复杂,用了很多的临时表,tempdb在安装时默认选择了安装SQLserver的本地磁盘路径,没有使用磁盘阵列. 在学习PostgreSQL时发现很多专家建议把临时表 ...

  7. iOS App Store上架新APP与更新APP版本

    iOS App Store上架新APP与更新APP版本 http://www.jianshu.com/p/9e8d1edca148

  8. 关于iOS热修复(HotPatch)技术的使用总结

    苹果做了非常多的努力来建造和维持一个健康并且干净的应用环境.其中对现在的现状起到很大作用的部分就是苹果APP STORE,它是被一个十分周密的对所有提交的应用进行检查的审批程序所保护的.尽管这个程序是 ...

  9. centos7 mariadb

    闲置已久的空间环境配置忘得差不多了,今天得空整理,重置了磁盘重新搭建环境,首先在CentOS 7.0安装MariaDB的数据库,在这里记录下安装过程,以便以后查看. 1.安装MariaDB 安装命令 ...

  10. shell -vim

    编辑文件 vim vim 1.txt 点击i进入编辑模式 如果发现按上下左右有问题的且出现乱码的话,可能是编码格式不对导致的,在crt或者是xshell设置一下编码格式就行. 保存是点击ecs先退到预 ...