类名规范:首字母大写,后面每个单词首字母大写(大驼峰式)
变量名规范:首字母小写,后面每个单词首字母大写(小驼峰式)
方法名规范:同变量名一样 (如果是boolean类型,一般是疑问句形式,例如 isxxx() )
标识符的命名规则:
1.标识符可以使用 英文字母,数字,$ 以及下划线 _
2.标识符不能以数字开头
3.标识符不能是关键字
(最好是能够看出是做什么的 而不是乱命名)
写代码的同时需要养成写注释的习惯,方便他人以及自己今后的阅读代码
注释分为:传统注释:1)单行注释://
2)多行注释:/…/
文档注释:/**…*/
打印一个范围内所有的质数
package day01;
import java.util.Scanner;
/**
* @author 12032
*
*/
public class PrimeFinder {
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成的方法存根
// System.out.println(isPrime(21));
int begin; //开始范围
int end;//结束范围
int cnt = 0;//记录质数的个数
//Scanner是一个扫描器,其可以扫描某个区域,System.in 代表标准输入设备,就是键盘
Scanner scanner = new Scanner (System.in);
System.out.print("开始范围:");
begin=scanner.nextInt();
System.out.print("结束范围:");
end=scanner.nextInt();
for (int i=begin;i<=end;i++) {
if(isAdvPrime(i)) {
cnt++;
System.out.print(i+"\t");//\t是一个转义字符,是打印一个制表符
if(cnt%10==0) {
System.out.println();
}
}
}
}
/**
* 质数判断
* @param num 待测试的整数
* @return
* true 是质数
* false 不是质数
*/
private static boolean isPrime(int num) {
//特例处理
if(num<=1) return false;
if(num==2) return true;
//普通处理
int i;
for (i=2;i<=num-1;i++) {
if (num%i==0) break;
}
return i==num;
}
/**
* 优化后质数判断
* @param num
* @return
*/
private static boolean isAdvPrime(int num){
//特例处理
if(num<=1) return false;
if(num==2) return true;
//普通处理
int top =(int)Math.sqrt(num);
int i;
for (i=2;i<=top;i++) {
if (num%i==0) break;
}
return i==top+1;
}
}
寻找水仙花数
import java.util.Scanner;
/**
* @author 12032
*
*/
public class NarcissisticNumber {
/**
* @param args
*/
public static void main(String[] args) {
// System.out.println(isNarcissisticNumber(371));
int length;
int begin,end;
Scanner scanner=new Scanner(System.in);
System.out.print("请输入数字位数:");
length=scanner.nextInt();
begin=(int) Math.pow(10, length-1);
end=(int) Math.pow(10, length)-1;
System.out.println(String.format("开始范围:%d-结束范围:%d", begin,end));
for(int i=begin;i<=end;i++) {
if(isNarcissisticNumber(i))
System.out.println(i);
}
}
/**
* 求证是否为水仙花数
* @param num
* @return
*/
public static boolean isNarcissisticNumber(int num) {
int len=lenth(num);
int temp=num;
int sum=0;
while(temp>0) {
sum+=Math.pow(temp%10, len);
temp=temp/10;
}
return sum==num;
}
/**
* 获取整数的位数
* @param num
* @return
*/
private static int lenth(int num) {
int cnt = 0;
while (num>0) {
num=num/10;
cnt++;
}
return cnt;
}
}
矩阵旋转
/**
* @author 12032
*
*/
public class MatriRotator {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[][] m = createMatrix(4);
printMatrix(m);
rotateMatrix(m, 'R');
printMatrix(m);
rotateMatrix(m, 'L');
printMatrix(m);
}
private static void rotateMatrix(int[][] matrix,char direction) {
int[][]temp = copyMatrix(matrix);
int size = matrix.length;
for(int i=0;i<size;i++)
for(int j=0;j<size;j++) {
if(direction=='R')
matrix[j][size-1-i] =temp[i][j];
else if(direction=='R')
matrix[size-1-i][i]=temp[i][j];
}
}
/**
* 复制数组
* @param srcMatrix 源矩阵
* @return
*/
public static int[][] copyMatrix(int [][] srcMatrix){
int[][] copyMatrix = new int[srcMatrix.length][srcMatrix.length];
for(int i=0;i<srcMatrix.length;i++) {
for(int j=0;j<srcMatrix.length;j++)
copyMatrix[i][j] = srcMatrix[i][j];
}
return copyMatrix;
}
/**
* 构建矩阵
* @param size 矩阵规模
* @return
*/
private static int[][] createMatrix(int size) {
int[][] matrix = new int[size][size];
int num = 1;
//初始化矩阵
for(int i=0;i<size;i++)
for(int j=0;j<size;j++)
matrix[i][j] = num++;
return matrix;
}
/**
* 打印矩阵
* @param matrix
*/
private static void printMatrix(int [][]matrix) {
int size =matrix.length;
for(int i=0;i<size;i++) {
for(int j=0;j<size;j++) {
System.out.print(matrix[i][i]+"\t");
}
System.out.println();
}
System.out.println();
}
}
编码练习总结:
1.编写代码有规范,按规范编码,代码要有注释,而不只是一味的写代码,
2.测试驱动的开发(TDD:Test-Driven-Development)边写代码边测试 而不是一口气写完,不能及时发现出错,最后影响效率
3.模块化开发,可以为今后的开发做基础可以调用不用重复写实现同一个功能的代码,对于代码今后的升级,维护都能更加的方便。