扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
思路: 1 . 为了符合面对对象编程的需要, 为了少写二维数组, 点坐标,可以封装成一个Point对象
成都创新互联公司专业为企业提供靖江网站建设、靖江做网站、靖江网站设计、靖江网站制作等企业网站建设、网页设计与制作、靖江企业网站模板建站服务,十年靖江做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
class Point{
double x;//点对象的属性: x坐标
double y;//点对象的属性: y坐标
//点坐标创建时,需要传入2个参数,一个x坐标,一个y坐标
public Point(double x,double y){
this.x =x;//把传入的x坐标赋值给属性x
this.y =y;//把传入的y坐标赋值给属性y
}
public String toString() {//重写Object类的toString方法
return "("+x+","+y+")";// 方便我们需要打印输出时,得到字符串
}
}
参考代码
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
class Point{
double x;
double y;
public Point(double x,double y){
this.x =x;
this.y =y;
}
public String toString() {
return "("+x+","+y+")";
}
}
public class FindNearestPoints {
//文本格式 点的x,y坐标用逗号隔开, 每个点之间用空格隔开 ,具体如下
//6,5 7.1,3.5 4.2,3.8 9,6 7.5,3.4 4.1,3.9
public static void main(String[] args) {
Point[] ps = null;
try {
BufferedReader br = new BufferedReader(new FileReader("d:\\FineNearestPoints.txt"));
StringBuffer sbf = new StringBuffer();
String str = null;
while((str = br.readLine())!=null){
sbf.append(str.trim());
}
br.close();//流用完要关闭
String s = sbf.toString();
String[] ss = s.split(" ");//用空格,把字符串切割出来,每个字符串都包含一个点比如"6,5"
ps = new Point[ss.length];
for (int i = 0; i ss.length; i++){
String[] temp = ss[i].split(",");//用逗号 把字符串切割成两部分,比如"6" "5"
double x = Double.parseDouble(temp[0]);//字符串"6"--解析成数字6
double y = Double.parseDouble(temp[1]);
Point p = new Point(x,y);//创建点对象
ps[i] = p;//把点存入数组
}
} catch (IOException e) {
e.printStackTrace();
}
double mindis = distance(ps[0],ps[1]);//假定第一个和第二个坐标最近
Point[] p2 = {ps[0],ps[1]};
for (int i = 1; i ps.length; i++) {
for (int j = i+1; j ps.length; j++) {//为了让点不和自身的距离比较,所以j=i+1
if( distance(ps[i],ps[j])mindis){//如果比假设的最近距离还要近,那么暂时他们就最近
mindis= distance(ps[i],ps[j]);
p2[0]=ps[i];
p2[1]=ps[j];
}
}
}
System.out.println("最近的点距离为:"+mindis);
System.out.println("最近的点对是:"+p2[0]+"="+p2[1]);
}
public static double distance(double x1, double y1, double x2, double y2) {
return Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
}
public static double distance(Point p1,Point p2){
return distance(p1.x, p1.y, p2.x, p2.y);
//return Math.sqrt((p2.x -p1.x) * (p2.x- p1.x) + (p2.y - p1.y) * (p2.y- p1.y));
}
}
输出
最近的点距离为:0.14142135623730995
最近的点对是:(4.2,3.8)=(4.1,3.9)
1)尽量指定类、方法的final修饰符。带有final修饰符的类是不可派生的,Java编译器会寻找机会内联所有的final方法,内联对于提升Java运行效率作用重大,此举能够使性能平均提高50%。
2)尽量重用对象。由于Java虚拟机不仅要花时间生成对象,以后可能还需要花时间对这些对象进行垃圾回收和处理,因此生成过多的对象将会给程序的性能带来很大的影响。
3)尽可能使用局部变量。调用方法时传递的参数以及在调用中创建的临时变量都保存在栈中速度较快,其他变量,如静态变量、实例变量等,都在堆中创建速度较慢。
4)慎用异常。异常对性能不利,只要有异常被抛出,Java虚拟机就必须调整调用堆栈,因为在处理过程中创建了一个新的对象。异常只能用于错误处理,不应该用来控制程序流程。
5)乘法和除法使用移位操作。用移位操作可以极大地提高性能,因为在计算机底层,对位的操作是最方便、最快的,但是移位操作虽然快,可能会使代码不太好理解,因此最好加上相应的注释。
6)尽量使用HashMap、ArrayList、StringBuilder,除非线程安全需要,否则不推荐使用 Hashtable、Vector、StringBuffer,后三者由于使用同步机制而导致了性能开销。
尽量在合适的场合使用单例。使用单例可以减轻加载的负担、缩短加载的时间、提高加载的效率,但并不是所有地方都适用于单例。
其实方法 很多, 我对SubString 情有独钟。 所以给你提示这个词。 首先 获取2个字符窜的 长度。 一般长 就用SubString 截取 一个一个比较。 然后打印 不同就设置一个颜色打印 长度不同的情况 取短的。 判断和上面一样 剩下的 直接 改变颜色打印就行了 主要 看SubString 用法 截取字符窜。 根据 字符的下标
Java代码之于java程序员而言就是左膀右臂,java代码写的好的java程序员明显更是企业的欢迎,一个优秀的java程序员的考核标准之一也是看他的编程水平。
其实有的java程序员java代码会受到大家的追捧,是因为他在写代码时注意的细节往往多于那些不怎么关注java代码编程细节的程序员,俗话说:“细节决定成败”,那么如何写出好的java代码呢?IT培训介绍一起来讨论下:
1.重视注释
有的java程序员在写代码时,从来没有想过要在java代码后加上相关的注释,甚至是上万行的代码也没有想过加上注释,这就存在很大的问题,不说你的代码会跟其他人分享讨论,就你自己回顾你是怎么写好这篇代码的,你也是半天无法理出头绪,这就为维护和修改等等工作添加了很大的麻烦。所以,要想写出好的java代码,一定从简短的java代码编写开始注重在java代码后面加上相应的注释,养成良好的习惯。
2.重视排版整洁
看很多java程序员的排版总觉得在欣赏一幅艺术品,但是看到一些java程序员的排版却总觉得无力吐槽。同样是编写代码,但是给人的视觉体验是相当的不同,当然好的java代码给人的享受也是美的,所以要想写出好的代码,一定要重视排版整洁。
3.注重命名规则
现在在一个团队开发中,都会提前定制一个统一的命名规则,这样利于提高工作效益。但是很多java程序员是缺乏这个意识的,每次敲代码,更喜欢按照自己惯常的方式老命名模块、函数,这样是方便了自己,但是忽视团队协作,所以在日常工作中,特别是团队工作中一定要重视命名规则。
4.养成备份习惯
备份的重要性不用小编强调,相必你也知道。但是有的java程序员就是没有养成这样的好习惯,每次敲完代码就不记得随手保存,每次等到除了事故,比如电脑出了故障,辛辛苦苦敲打的java代码没保存找不回来的情况下就开始懊恼,与其这样还不如在一开始就养成良好的备份习惯,这样也方便自己日后查找利用。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流