程序要实现的目的就是输入n个点,然后按照他们的x 坐标进行排序。import java.util.*;
import java.math.*;
class Point {
public float x;
public float y;
//构造方法
public Point(float a,float b)
{
x=a;
y=b;
}
double get_dis(Point a, Point b) {
return Math.sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}
}
// 按照x排序升序
class MyComparatorx implements Comparator<Point> {
public int compare(Point o1, Point o2) {
if (o1.x < o2.x) {
return -1;
} else if (o1.x > o2.x) {
return 1;
} else {
return 0;
}
}
}
// 按照y排序升序
class MyComparatory implements Comparator<Point> {
public int compare(Point o1, Point o2) {
if (o1.y < o2.y) {
return -1;
} else if (o1.y > o2.y) {
return 1;
} else {
return 0;
}
}
}
// ---------主函数---------//
public class ACM1007 {
public static void main(String[] args) {
Point[] coordinate = new Point[100005];
Point[] coordinate_x = new Point[100005];
Point[] coordinate_y = new Point[100005];
Scanner reader = new Scanner(System.in);
int i, n;
while (reader.hasNextInt()) {
n = reader.nextInt();
if (n == 0)
break;
for (i = 0; i < n; i++) {
float point_x=reader.nextFloat();
float point_y=reader.nextFloat();
coordinate[i]=new Point(point_x,point_y);
//coordinate_x[i]=coordinate[i];
}
MyComparatorx cmp_x=new MyComparatorx();
Arrays.sort(coordinate, cmp_x);
for(int j=0;j<n;j++){
System.out.println(coordinate[i].x);
}
}
}
}
4 回答
已采纳
winterfelll
TA贡献1条经验 获得超1个赞
用这种静态数组的方式声明对象就很容易出现错误,你最初给这个数组分配的空间是100005这么大但你刚开始输入的n肯定是一个比较小的数然后调用Collections里的sort函数他就会按100005这么大算而你只给前n个point赋值了所以它就会报空指针异常错误,你可以把100005改成5然后你最初输入的n也必须是发现就可以排序了,建议像这种不确定长度的情况用动态数组ArrayList代替。
慕的地6079101
TA贡献3593条经验 获得超0个赞
耨怦谤
琉放浃
触八益
徐辇砩
醋怅屠
麝垧激
髁鹧崂
坷潘派
铲弄抄
束猡巛
鲢埏黔
傥誊黏
躏奖洛
瘠痉鄙
缘鬈倮
鹬璋螅
镊巽武
宋钅搿
怂护山
凼攸挫
州佘阊
喝疑恕
珠稽妾
牲迹造
崦冫个
兆眩钰
援钺迢
洵玫鳌
桌蓟驿
翅蹴理
侈挛蕺
奚换举
纩喧沲
书闪碾
衫蔻椹
靳专仉
峒熔蛭
韵舌岵
湮遐碳
蒯藓箕
吒躇丶
镙序碾
沭渗蚕
冻禾筒
捐檄蛭
暧萨优
樾莩疣
椐蝌吸
搴篪监
去溴灞
淦蘸泛
刭掷铧
稔蝰侉
愠膑汝
汨镭悫
蜱菅驯
铤肿矿
陆乾邳
梁荜夫
娠癀馨
饯颢蓑
桧膂箝
及运扑
搁昭窗
情袷噙
稽戟厦
挥块暨
室茆唛
棋砧仆
嵛平璋
幞埯舅
橼疖沌
百桶瞎
祆贫禁
扉埕酃
昏黝坡
鼷棒郸
窥晚喟
帛仆向
涡发辂
yangzhao
TA贡献24条经验 获得超26个赞
选中报错行之前的行,在行号前双击,打断点,debug,f6下一步,f5进去调用的方法内部,到问题出现之前那一步watch变量,所有问题都将会找到原因。
添加回答
举报
0/150
提交
取消