编程真善美

命名风格:

驼峰命名法

小驼峰法

变量一般用小驼峰法标识。驼峰法的意思是:除第一个单词之外,其他单词首字母大写: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. System.nanoTime与System.currentTimeMillis

    System.nanoTime提供相对精确的计时,但是不能用他来计算当前日期.(系统计时器的当前值,以毫微秒为单位) System.currentTimeMillis返回的是从1970.1.1 UTC ...

  2. Python:pip 安装第三方库,速度很慢的解决办法

    场景 想安装 Django 库 在 cmd 敲入命令 pip install Django 但是发现下载安装文件非常慢 原因:实质访问的下载网站是 https://pypi.Python.org/si ...

  3. Java类的反射

    一.类对象与反射 先来简单介绍一下反射,反射使得程序员能够更加的了解一个类,包括获得构造方法.成员方法.成员域包括注解等. 1.访问构造方法 访问构造方法有四种方式, getDeclaredConst ...

  4. pycharm 怎么能像在命令行中输入参数进行调试

    pycharm中配置main参数 Run->Edit Configurations->Script Parames 把需要在xxx.py A B C 后面的参数输入到如下位置. 否则会报错 ...

  5. 小猿圈-IT自学人的小圈子 https://book.apeland.cn/details/54/

    笔记链接   https://book.apeland.cn/details/54/ 学习视频   https://www.apeland.cn/python

  6. Codeforces 884f F. Anti-Palindromize

    题  OvO http://codeforces.com/contest/884/problem/F (Educational Codeforces Round 31 - F) 884f 解 题目标签 ...

  7. 课程 6;比特币产生,分配(2100w,10个矿区)

    www.8btc.com   (每21w个,减半分配)

  8. [PWN]fsb with stack frame

    0x00: 格式化字符串漏洞出现的时间很早了,偶然在前一段时间学到了一个其他的利用姿势,通过栈桢结构去利用格式化字符串漏洞. 原文链接:http://phrack.org/issues/59/7.ht ...

  9. maven项目创7 配置分页插件

    页面编写顺序   首先确定是否拥有想要的pojo(对象实体类)———>dao层mybatis配置——>service层的接口及实现类——>controller(web下) 分页插件作 ...

  10. Ubuntu:19.04程序启动缓慢

    造冰箱的大熊猫@cnblogs 2019/5/8 Ubuntu 19.04,程序(Firefox.Terminal.Nautilus)启动非常缓慢.点击桌面工具栏上的Nautilus图标后,隔了很久才 ...