用HTML&JavaScript写计算器给【导航】出来的【新大陆】?
- 写计算器??
- 如何实现??
- 1. 布局?
- 2. 交互准备?
- 3. 交互分解?
- 4. 获取第一个数?
- 5. 获取第二个数?
- 6. 获取运算符?
- 7. 运算?
- 8.输出?
- 9. 运行?
- 10. Debug?
- 11. 【新大陆】闪亮登场?
- 12. Debuging?
- 13. 数值转化?
- 思考?
- 越努力越幸运
- 复杂可以变得【***简单***】,困难可以变得【***容易***】
- 时光真是XX
- Debug?
写计算器??
今天老师让用HTML&JavaScript写一个如下图的计算器
如何实现??
这几天学习编程,对编程思维最大的感触就是对编程问题如何进行解析,达尔文说生物进化是从简单到复杂,而我想对一个编程问题解析就需要【退化】(从复杂到简单—),也就是将复杂的问题拆解成一个个简单的小问题。这也让我想起了地理学,一个地理环境是由许多的地理要素组成,虽然可以把它拆解成一个个地理要素,但整体是要大于部分之和的,也就是说一个个简单的要素会相互产生关系,所以,最后整体实际是除了要素个体,还有要素的关系,这个关系应该是比要素还要多,这也就是复杂的原因所在吧。
所以我们将这个问题拆解,一步一步来
1. 布局?
先用HTML画出这个界面
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>计算器</title>
</head>
<body>
<h1>欢迎您使用计算器</h1>
第一个数:<input type="text"/>
<br />
第二个数:<input type="text"/>
<br />
运算器选择:<select>
<option>+</option>
<option>-</option>
<option>*</option>
<option>/</option>
</select>
<br />
<input type="button" value="运算"/>
<div></div>
</body>
</html>
2. 交互准备?
因为需要交互,所以弄个JavaScript文件,并稍稍修改HTML
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>计算器</title>
<script src="operation.js"></script>
</head>
<body>
<h1>欢迎您使用计算器</h1>
第一个数:<input type="text" id="1num"/>
<br />
第二个数:<input type="text" id="2num"/>
<br />
运算器选择:<select id="ope">
<option value="0">+</option>
<option value="1">-</option>
<option value="2">*</option>
<option value="3">/</option>
</select>
<br />
<input type="button" value="运算" onclick="opration()"/>
<div id="mdiv"></div>
</body>
</html>
3. 交互分解?
JavaScript中需要实现五个功能
function operation(){
//1.获取第一个数
//2.获取第二个数
//3.获取运算符
//4.运算
//5.输出
}
4. 获取第一个数?
//1.获取第一个数
var num1 = document.getElementById("1num").value;
5. 获取第二个数?
//2.获取第二个数
var num2 = document.getElementById("2num").value;
6. 获取运算符?
//3.获取运算符
var oper = document.getElementById("ope").value;
7. 运算?
//4.运算
var result;
switch(oper){
case 0:result = num1 + num2;break;
case 1:result = num1 - num2;break;
case 2:result = num1 * num2;break;
case 3:result = num1 / num2;break;
}
8.输出?
//5.输出
document.getElementById("mdiv").innerHTML=result;
9. 运行?
看起来代码似乎写完了,那咱们运行一下
下图为运行结果
发现结果并不符合期望,问题到底出在哪?怎么找问题?
10. Debug?
先检查代码是否出现低级错误,比如标点符号、大小写等,但程序运行有结果,说明应该没有低级错误。发现HTML和JavaScript的代码调试不像Java那样简单,Java可以利用IDE设置breakpoint帮忙分析,但我用的HBuilderX这个HTML的IDE发现并没有这种功能(可能因为我是菜鸟,没找到,我也是昨天才开始学HTML和JavaScript并接触HBuildX的),那怎么办?
11. 【新大陆】闪亮登场?
这里当然还是需要借助工具,这个【新大陆】便是浏览器。这里以Chrome为例,当然,其他浏览器也一样的,咱们需要调出浏览器的开发者工具【快捷键F12】,然后找到console界面,然后通过手动在JavaScript代码中设置【breakpoint】
12. Debuging?
咱们再JavaScript代码中设置【breakpoint】的方法主要是同console.log()和console.log(typeof())这两个方法,演示如下
/1.获取第一个数
var num1 = document.getElementById("1num").value;
console.log(num1);
console.log(typeof(num1));
再次运行时发现console界面出现下图效果
这是什么意思呢?
console.log(num1)是将num1的值打印,当然结果可知num1=1,但是要注意,console.log(typeof(num1))是将num1的类型打印,按理说num1的类型应该是number,但显示却是string,那这表示什么意思???说明document.getElementById(“1num”).value返回的是一个string类型,所以在后面的运算中是以string进行运算的,由于我在定义result时并没有初始化,说明result应该undefine型数据,oper应该也是string型数据(因为document.getElementById(“1num”).value返回的是一个string类型),所以最后result并没有赋值,依然是undefine型数据,所以程序输出结果为undefined。当然这些都同时推论,接下来就来验证一下咱们的推论
//3.获取运算符
var oper = document.getElementById("ope").value;
console.log("oper值为:"+oper);
console.log("oper类型为:"+typeof(oper));
//4.运算
var result;
console.log("运算前result值为:"+result);
console.log("运行前result类型为:"+typeof(result));
switch(oper){
case 0:result = num1 + num2;break;
case 1:result = num1 - num2;break;
case 2:result = num1 * num2;break;
case 3:result = num1 / num2;break;
}
//5.输出
document.getElementById("mdiv").innerHTML=result;
console.log("运算后result值为:"+result);
console.log("运行后result类型为:"+typeof(result));
结果符合推理,那接下来怎么解决呢?
13. 数值转化?
我们可以看到是因为变量类型发生了改变导致计算结果出了问题,那么只要将变量的类型转换到对应的类型即可
//1.获取第一个数
var num1 = parseInt(document.getElementById("1num").value);
/* console.log(num1);
console.log(typeof(num1)); */
//2.获取第二个数
var num2 = parseInt(document.getElementById("2num").value);
//3.获取运算符
var oper = parseInt(document.getElementById("ope").value);
思考?
当然,这个程序还有很多地方需要优化,比如输入值的限制、一些重复代码的提取等等,这里咱就不过多讲了,接下需要总结一下我的思考。
越努力越幸运
坦白讲,老师在上课时并没讲如何调式HTML和JavaScript,这是自己“胡乱”撞出来的,这中间当然受挫了n+1次,但庆幸自己没有放弃,并且幸运的找到了问题的根源,所以啊,我想生活中的大多数幸运应该是自己不断努力的结果,坚持到底!
“This game is not over until I win."?
复杂可以变得【简单】,困难可以变得【容易】
如上所言,复杂的背后可能几乎都是简单的堆积,复杂和困难大多时候可能是自己的心理障碍,所以一定要慢慢转变看待问题的心态和角度,但具体如何转变呢,我想可能需要给自己定下目标,给自己期望,这样才有动力去做。
时光真是XX
想想自己一生能有多长呢,看看自己眼下的正在做的事,希望自己能坚持下去,实现梦想!
Debug?
我=?/0;