编程真善美
命名风格:
驼峰命名法
小驼峰法
变量一般用小驼峰法标识。驼峰法的意思是:除第一个单词之外,其他单词首字母大写: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; } }
总结:
- 测试驱动的开发:(Test-Driven-Development)
- 模块化开发
- 技术沉淀