java算法:构建块
在java中用来存储和处理信息的主要的低级构造。使用java的类来描述要处理的信息,定义要处理它们的方法,并构建能实际存储这些数据的对象。我们所有的数据结构由对象和指向对象的指针构成。
我们书写的程序就是要处理我们所生活的世界和自然语言信息,在计算机中要为这些信息构建基本块--数字或字母提供内嵌支持。在java中,基本的数据类型构建起来有:boolean,char,byte,short,int,long,float,double。
定义:数据类型是值集合和对那些值进行的一套操作。
例一:每个java程序就是一种数据类型,值集合和相关操作(方法)的列表。
如:处理平面上的点时,可以这样定义:class Point{double x; double y;}
实例化对象:
Point a = new Point();
Point b = new Point();
并对a,b赋值:a.x = 1.0; a.y = 1.0; b.x = 4.0; b.y = 5.0;
即:a代表点(1.0,1.0) b代表点(4.0,5.0);
例二:方法定义
求ab的距离:
double distance(Point a, Point b){
double dx = a.x - b.x;
double dy = a.y - b.y;
return Math.sqrt(dx * dx + dy * dy);
}
double distance(Point a, Point b){
double dx = a.x - b.x;
double dy = a.y - b.y;
return Math.sqrt(dx * dx + dy * dy);
}
使用java的类机制来定义数据类型。
例三:Point类的实现:
class Point{
double x,y;
Point(){
x = Math.random();
y = Math.random();
}
Point(double x, double y){
this.x = x;
this.y = y;
}
double r(){
return Math.sqrt(x * x + y * y);
}
double theta(){
return Math.atan2(y , x);
}
double distance(Point p){
double dx = x - p.x;
double dy = y - p.y;
return Math.sqrt(dx * dx + dy * dy);
}
public String toString(){
return "(" + x + " , " + y + ")";
}
}
class Point{
double x,y;
Point(){
x = Math.random();
y = Math.random();
}
Point(double x, double y){
this.x = x;
this.y = y;
}
double r(){
return Math.sqrt(x * x + y * y);
}
double theta(){
return Math.atan2(y , x);
}
double distance(Point p){
double dx = x - p.x;
double dy = y - p.y;
return Math.sqrt(dx * dx + dy * dy);
}
public String toString(){
return "(" + x + " , " + y + ")";
}
}
例四:随机数序列统计,计算一长串随机数的均值和标准方差。
public class PrintStats {
public static void main(String[] args) {
int N = Integer.parseInt(args[0]);
double m = 0.0, s = 0.0;
for(int i = 0; i < N; i++){
int x = (int)(Math.random() * 10000);
double d = (double) x;
m += d/N; s+= (d * d) /N;
}
s = Math.sqrt(s - m * m);
System.out.println("avg.:" + m);
System.out.println("std.dev. :" + s);
}
}