最近看了一个大神推荐的某公司面试程序员的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. jQuery 中的事件冒泡和阻止默认行为

    1.事件冒泡 <%@ page language="java" import="java.util.*" pageEncoding="utf-8 ...

  2. IOS网络第四天 -网络文件上传(0923略)

    01-NSURLSession02-断点续传 02-文件上传01-基本的上传 03-文件上传03-代码封装 04-文件上传04-获得MIMEType.mp4 05-文件的压缩和解压缩.mp4 06-压 ...

  3. 【5集iCore3_ADP演示视频】5-4 iCore3与应用开发平台的组装与拆卸

    iCore3双核心应用开发平台基于iCore3双核心板,包含ARM.FPGA.7寸液晶屏.双通道数字示波器.任意波发生器.电压表等模块,是一款专为电子爱好者设计的综合性电子学习系统. [视频简介]本视 ...

  4. 青蛙跳100级台阶算法,完整可运行,php版本

    /* 算法题目 * 2016年4月11日16:11:08 * 一只青蛙,一次可以跳1步,或者2步,或者3步,现在要跳100级台阶,请问青蛙有多少种上100级台阶的跳法 * 1步的有$n 2步的有$m ...

  5. Maven项目WEB-INF/views无法引入js,css静态文件解决方法

    web.xml针对文件后缀配置以下,对客户端请求的静态资源如图片.JS文件等的请求交由默认的servlet进行处理 <servlet-mapping> <servlet-name&g ...

  6. A Taxonomy of Computer Organizations

    COMPUTER OR GANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION

  7. NONUNIFORM MEMORY ACCESS

    COMPUTER ORGANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION In terms of commercia ...

  8. 关于IOS的唯一标识总结

    APPLE官方宣布在2013年5月后,使用 UUID的APP将不能通过审核,同时APPLE增加了广告标识符(IDFA)和IDFV. 1.有什么方法获取UUID? //CFUUID CFUUIDRef ...

  9. scanf、printf、gets、puts的应用及区别

    1.scanf()函数 函数scanf()按指定的格式从键盘读取数据,并将其赋给一个或多个变量.例如: scanf(“%d %f”, &x,&rate);  输入多个变量时,scanf ...

  10. Quartz2D 编程指南(四)位图与图像遮罩、CoreGraphics 绘制 Layer

    概览 图形上下文 路径 颜色与颜色空间 变换 图案 阴影 渐变 透明层 Quartz 2D 中的数据管理 位图与图像遮罩 CoreGraphics 绘制 Layer 位图与图像遮罩 简介 位图与图像遮 ...