编程真善美

命名风格:

驼峰命名法

小驼峰法

变量一般用小驼峰法标识。驼峰法的意思是:除第一个单词之外,其他单词首字母大写:camelCase

大驼峰法(即帕斯卡命名法)

相比小驼峰法,大驼峰法把第一个单词的首字母也大写了。常用于类名,属性,命名空间等:CamelCase

下划线命名法

单词间用下划线(_)分割 :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;
}
}

总结:

  1. 测试驱动的开发:(Test-Driven-Development)
  2. 模块化开发
  3. 技术沉淀

JavaScript(1)——编程真善美的更多相关文章

  1. 读书笔记:JavaScript DOM 编程艺术(第二版)

    读完还是能学到很多的基础知识,这里记录下,方便回顾与及时查阅. 内容也有自己的一些补充. JavaScript DOM 编程艺术(第二版) 1.JavaScript简史 JavaScript由Nets ...

  2. Web Worker javascript多线程编程(一)

    什么是Web Worker? web worker 是运行在后台的 JavaScript,不占用浏览器自身线程,独立于其他脚本,可以提高应用的总体性能,并且提升用户体验. 一般来说Javascript ...

  3. Web Worker javascript多线程编程(二)

    Web Worker javascript多线程编程(一)中提到有两种Web Worker:专用线程dedicated web worker,以及共享线程shared web worker.不过主要讲 ...

  4. Javascript模块化编程(三):require.js的用法

    Javascript模块化编程(三):require.js的用法 原文地址:http://www.ruanyifeng.com/blog/2012/11/require_js.html 作者: 阮一峰 ...

  5. Javascript模块化编程(二):AMD规范

    Javascript模块化编程(二):AMD规范   作者: 阮一峰 原文地址:http://www.ruanyifeng.com/blog/2012/10/asynchronous_module_d ...

  6. Javascript模块化编程(一):模块的写法

    Javascript模块化编程(一):模块的写法 作者: 阮一峰 原文链接:http://www.ruanyifeng.com/blog/2012/10/javascript_module.html ...

  7. JavaScript异步编程的主要解决方案—对不起,我和你不在同一个频率上

    众所周知(这也忒夸张了吧?),Javascript通过事件驱动机制,在单线程模型下,以异步的形式来实现非阻塞的IO操作.这种模式使得JavaScript在处理事务时非常高效,但这带来了很多问题,比如异 ...

  8. JavaScript异步编程原理

    众所周知,JavaScript 的执行环境是单线程的,所谓的单线程就是一次只能完成一个任务,其任务的调度方式就是排队,这就和火车站洗手间门口的等待一样,前面的那个人没有搞定,你就只能站在后面排队等着. ...

  9. javascript异步编程的前世今生,从onclick到await/async

    javascript与异步编程 为了避免资源管理等复杂性的问题, javascript被设计为单线程的语言,即使有了html5 worker,也不能直接访问dom. javascript 设计之初是为 ...

随机推荐

  1. git clone报错error: RPC failed; curl 18 transfer closed with outstanding read data remaining

    具体错误信息如下图: error: RPC failed; curl 18 transfer closed with outstanding read data remaining    fatal: ...

  2. 逻辑卷管理(LVM)

    LVM:Logical Volume Management 逻辑卷管理 LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性. 传统磁盘管理:我们上层是直接访问文件系统,从而对底层的物 ...

  3. HDU-2594-Simpsons' Hidden Talents(kmp, 扩展kmp)

    链接: https://vjudge.net/problem/HDU-2594#author=0 题意: 求S1的前缀和S2的后缀的<最大>匹配 思路: kmp方法: 将s1, s2首尾连 ...

  4. mongodb为集合新增字段、删除字段、修改字段(转)

    新增字段 为atest集合新增一个字段content db.atest.update({},{$set:{content:""}},{multi:1}) 删除uname字段 db. ...

  5. apache log4j将日志保存在mongodb数据库中(转)

    og4j与mongodb整合 Mongo Java driver jar包 log4mongo-java jar包 配置log4j.properties文件,使之整合mongodb: #将Mongod ...

  6. Python SMTP发送邮件Ⅱ

    使用Python发送HTML格式的邮件 Python发送HTML格式的邮件与https://www.xuanhe.net/weixiu/4271.html发送纯文本消息的邮件不同之处就是将MIMETe ...

  7. net core 简单读取json配置文件

    //添加 json 文件路径 var builder = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()) ...

  8. Java多态性详解——父类引用子类对象

    来源:http://blog.csdn.net/hikvision_java_gyh/article/details/8957456 面向对象编程有三个特征,即封装.继承和多态. 封装隐藏了类的内部实 ...

  9. Cortex-M3 入门指南(三):时钟总线与复位时钟控制器

    [reset clock control  复位和时钟控制器] 时钟信号对于处理器非常重要,比如我们熟悉的 CPU 就是由时钟信号驱动的,而主频就是内核的的时钟信号频率.Cortex-M3 有着复杂的 ...

  10. 给string定义一个扩展方法

    创建一个 static 的类,并且里面的方法也必须是static的,第一个参数是被扩展的对象,必须标注为this,使用时,必须保证namespace using进来了. 实例: using Syste ...