JavaScript(1)——编程真善美
编程真善美
命名风格:
驼峰命名法
小驼峰法
大驼峰法(即帕斯卡命名法)
下划线命名法
单词间用下划线(_)分割 :underscope_case
编程切入点:
先制造核心发动机,不用忙着写主程序,每个方法要有文档:
例子:输入给定范围内的素数
package cn.edu.mju.dev;
import java.util.Scanner;
public class PrimeFinder {
/**
* main function
* @param args
*/
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("start:");
int begin, end, count = 0;
long sum = 0;
begin = scanner.nextInt();
System.out.println("end:");
end = scanner.nextInt();
for(int i = begin; i <= end; i++){
if(isPrime(i)) {
count ++;
sum += i;
System.out.print("\t"+i);
if(count % 10 == 0) System.out.println();
}
}
}
/**
* 判断是否是质数
* @param 带判定的数
* @return
* true 是质数
* false 不是质数
*/
private static boolean isPrime(int num) {
// special case
if(num <= 1) return false;
if(num == 2) return true;
// general case
int i;
for(i = 2; i < num; i++) {
if (num % i == 0) break;
}
return i == num;
}
}
上例算法不够先进,我们需要进行代码的优化,只要判断待测数num能不能被2-待测数的平方根√num整除即可:
package cn.edu.mju.dev;
import java.util.Scanner;
public class PrimeFinder {
/**
* main function
* @param args
*/
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("start:");
int begin, end, count = 0;
long sum = 0;
begin = scanner.nextInt();
System.out.println("end:");
end = scanner.nextInt();
for(int i = begin; i <= end; i++){
if(isAdvPrime(i)) {
count ++;
sum += i;
System.out.print("\t"+i);
if(count % 10 == 0) System.out.println();
}
}
}
/**
* 判断是否是质数
* @param 带判定的数
* @return
* true 是质数
* false 不是质数
*/
private static boolean isPrime(int num) {
// special case
if(num<1) return false;
if(num == 2) return true;
// general case
int i;
for(i = 2; i < num; i++) {
if (num % i == 0) break;
}
return i == num;
}
/**
* 判断是否是质数(大数据适应版)
* @param 带判定的数
* @return
* true 是质数
* false 不是质数
*/
private static boolean isAdvPrime(int num) {
// special case
if(num <= 1) return false;
if(num == 2) return true;
// general case
int i;
int sqrt = (int)Math.sqrt(num);
for(i = 2; i <= sqrt; i++) {
if (num % i == 0) break;
}
return i == sqrt + 1;
}
}
总结:
- 测试驱动的开发:(Test-Driven-Development)
- 模块化开发
- 技术沉淀
JavaScript(1)——编程真善美的更多相关文章
- 读书笔记:JavaScript DOM 编程艺术(第二版)
读完还是能学到很多的基础知识,这里记录下,方便回顾与及时查阅. 内容也有自己的一些补充. JavaScript DOM 编程艺术(第二版) 1.JavaScript简史 JavaScript由Nets ...
- Web Worker javascript多线程编程(一)
什么是Web Worker? web worker 是运行在后台的 JavaScript,不占用浏览器自身线程,独立于其他脚本,可以提高应用的总体性能,并且提升用户体验. 一般来说Javascript ...
- Web Worker javascript多线程编程(二)
Web Worker javascript多线程编程(一)中提到有两种Web Worker:专用线程dedicated web worker,以及共享线程shared web worker.不过主要讲 ...
- Javascript模块化编程(三):require.js的用法
Javascript模块化编程(三):require.js的用法 原文地址:http://www.ruanyifeng.com/blog/2012/11/require_js.html 作者: 阮一峰 ...
- Javascript模块化编程(二):AMD规范
Javascript模块化编程(二):AMD规范 作者: 阮一峰 原文地址:http://www.ruanyifeng.com/blog/2012/10/asynchronous_module_d ...
- Javascript模块化编程(一):模块的写法
Javascript模块化编程(一):模块的写法 作者: 阮一峰 原文链接:http://www.ruanyifeng.com/blog/2012/10/javascript_module.html ...
- JavaScript异步编程的主要解决方案—对不起,我和你不在同一个频率上
众所周知(这也忒夸张了吧?),Javascript通过事件驱动机制,在单线程模型下,以异步的形式来实现非阻塞的IO操作.这种模式使得JavaScript在处理事务时非常高效,但这带来了很多问题,比如异 ...
- JavaScript异步编程原理
众所周知,JavaScript 的执行环境是单线程的,所谓的单线程就是一次只能完成一个任务,其任务的调度方式就是排队,这就和火车站洗手间门口的等待一样,前面的那个人没有搞定,你就只能站在后面排队等着. ...
- javascript异步编程的前世今生,从onclick到await/async
javascript与异步编程 为了避免资源管理等复杂性的问题, javascript被设计为单线程的语言,即使有了html5 worker,也不能直接访问dom. javascript 设计之初是为 ...
随机推荐
- Java nio 理解
Java nio 称为Java new IO ,对Java io而言的.他有两个主要的概念:缓存.通道. 在程序中,数据的来源或写入,要么网络.要么硬盘.所有通道分为:文件通道.TCP通道.UDP通道 ...
- Linux之vim文本编译器
Vim是从 vi 发展出来的一个文本编辑器.代码补完.编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用.和Emacs并列成为类Unix系统用户最喜欢的编辑器. [root@izwz98re ...
- 【OI学习注意事项】
1. 必备知识 普及组必学 1.模拟算法(暴力枚举),按照题目的要求,题目怎么说就怎么做,保证时间和正确性即可. 2.搜索与回溯,主要的是\(DFS\)(深度优先搜索)和\(BFS\)(宽度优先搜索) ...
- mybatic进阶遗留
参考文章: MyBatis的架构设计以及实例分析 MyBatis缓存机制的设计与实现 MyBatis的一级缓存实现详解 及使用注意事项 MyBatis的二级缓存的设计原理
- Atcoder CODE FESTIVAL 2016 Final G - Zigzag MST[最小生成树]
题意:$n$个点,$q$次建边,每次建边选定$x,y$,权值$c$,然后接着$(y,x+1,c+1),(x+1,y+1,c+2),(y+1,x+2,c+3),(x+2,y+2,c+4)\dots$(画 ...
- 14-SQLServer索引碎片
一.总结 1.数据库的存储本身是无序的,建立聚集索引之后,就会按照聚集索引的物理顺序存入硬盘: 2.建立索引完全是为了提升读取的速度,相对写入的速度就会降低,没有索引的表写入时最快的,但是大多数系统读 ...
- Python XML 解析Ⅱ
make_parser方法 以下方法创建一个新的解析器对象并返回. 参数说明: parser_list - 可选参数,解析器列表 parser方法 以下方法创建一个 SAX 解析器并解析xml文档: ...
- C# Lambda Left Join AND Group by Then Sum
var list = List1.Join( List2, l1 => new { l1.Cityid }, l2 => new { l2.Cityid }, (item1, item2) ...
- Java 代码的精优化
一.避免使用BigDecimal(double) BigDecimal(double) 存在精度损失风险,在精确计算或值比较的场景中可能会导致业务逻辑异常. 反例: // BigDecimal 反例 ...
- angular打包(一): electron
路由问题: 打包成electron前,需要修改 index.html <base href="/"> 成 <base href="./"> ...