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 设计之初是为 ...
随机推荐
- python 获取安装包apk, ipa 信息
# -*- coding:utf-8 -*- import re import os import zipfile from biplist import * from androguard.core ...
- 使用Mutex實現單一程式執行個體的注意事項(转)
相信大家都知道在.NET程式中若要實現單一程式執行個體,一般來說有幾種方法,像是去判斷是否已經有開啟的Process是相同的程式.用Mutex與Semaphore之類的技術來判斷是否程式正在開啟.但是 ...
- JS 循环的两种方式
// 1.for循环 for (var i = 0; i <= 10; ++ i) { console.log(i); } // 2.while循环 var i = 0; while (i &l ...
- Java程序中使用 Jsoup 爬虫( 简单示例 )
一.maven项目里pom添加jsoup依赖 <dependency> <groupId>org.jsoup</groupId> <artifactId> ...
- PHP类知识----析构方法点滴
网页执行完毕 手动调用析构方法 通过unset() 应用场景:断开mysql的连接 不同情况下,析构方法调用的时机不同,程序执行顺序如下 <?php class mycoach { public ...
- 【dmp文件还原到oralce数据库】
1.数据库执行语句,创建一个用户并赋予权限 --创建用户CREATE USER test2 IDENTIFIED BY 123456 DEFAULT TABLESPACE USERS TEMPORAR ...
- codevs 1501 二叉树最大宽度和高度x
题目描述 Description 给出一个二叉树,输出它的最大宽度和高度. 输入描述 Input Description 第一行一个整数n. 下面n行每行有两 ...
- 2019牛客暑期多校训练营(第一场)H 线性基+计算贡献
题意 给n个整数,求满足子集异或和为0的子集大小之和. 分析 将问题转化为求每个元素的贡献次数之和. 先对n个数求线性基,设线性基大小为r,即插入线性基的数字个数为r,可以分别计算线性基内数的贡献和线 ...
- 应用程序无法正常启动(0xc000007b)请单击确定关闭程序
1.问题 在win10 VS2105 环境下面开发了一个调用get接口获取数据然后写入pg数据库的程序,在自己电脑上运行正常.复制到win7环境下运行,单击出现如下图所示的提示框. 2.原因分析 出现 ...
- Centos-Redhat下远程桌面的方法 & Redhat改Centos源
折腾了好几天才搞定,Redhat下远程桌面的方法,首先保证本身已经装了桌面,并且可以ssh访问 由于系统中自带python2环境,装了anaconda以及它带的python3环境,这个必须存在(前提) ...