编程真善美

命名风格:

驼峰命名法

小驼峰法

变量一般用小驼峰法标识。驼峰法的意思是:除第一个单词之外,其他单词首字母大写: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. ubuntu下mysql的用户添加、授权、取消授权

    一.添加用户 新增用户会有两种方式的,一种是使用create命令,另一种是直接回使用grant 命令 create user 名字@登陆地址 identified by "密码"; ...

  2. HttpServletResponse 返回的json数据不是json字符串,而是json对象

    今天在改一个bug 情况: 在spring boot中写了一个类Result ,用来统一封装 各个API响应结果 , 其中重写了toString()方法来返回 json字符串 . 在正常情况下,从其它 ...

  3. web添加学生信息(首发web)

    程序思路,先在JSP上画好页面,然后再创建一Servlet文件用于判断在网页上操作是否正确,还需要与数据库相连接,用DBUtile文件连接数据库,用Dao层来实现数据的增加,用Service来服务于D ...

  4. hive日期函数-Demo(二)

    需求:某资产近一个月的资产值 比如:今天是2018年2月28日,近一个月若是按照自然月来算,那么是2018年2月1日至2018年2月28日.最终需要的日期格式为:yyyyMMdd. 当日时间戳 uni ...

  5. HTTP协议几个版本的理解

    HTTP (HyperText transfer protocol) 超文本传输协议 Http是一个应用层协议,基于TCP协议(传输层)之上,规定WWW服务器 浏览器之间信息传递规范.使用的默认端口号 ...

  6. 对webview的研究--------引用

    简要的说,webview能够在移动应用中开辟出一个窗口,在里面显示html页面,css以及js代码也可以被解析执行,它使用的是我们熟悉的webkit内核.android和ios都有相应的API,所以写 ...

  7. The Cost of JavaScript --------引用

    tl;dr: 想要保持页面的快速运行,你需要仅加载当前页面所需的 JavaScript 代码.优先考虑用户所需,之后运用代码分离懒加载其他内容. Is it happening - 在这个时期,你可以 ...

  8. 数位dp入门(内容一样,新版格式)

    顾名思义,数位dp,是一种用来计数的dp,就是把一个数字拆成一个一个数位去统计 如果现在给你一道题,需要你求在区间[l,r]内满足条件的解的个数,我们很容易想到去暴力枚举,但要是数据范围太大这种办法就 ...

  9. Oracle-sql*plus

    连接命令 (1)conn[ect] 用法: conn 用户名/密码@网络服务名 [as sysdba/sysoper] 当用特权用户身份连接时,必须带上 as sysdba 或是 as sysoper ...

  10. Jmeter函数 参数

    1.time时间函数 ${__time(,)} 1450056496991 //无格式化参数,返回当前毫秒时间 ${__time(/1000,)} //返回当前时间为秒 ${__time(yyyyMM ...