称检测点查询
package practice;
import java.awt.List;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
import javax.xml.namespace.QName;
public class practice1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int x = sc.nextInt();
int y = sc.nextInt();
int[] N = new int[n];
int[] Nx = new int[n];
int[] Ny = new int[n];
for (int i = 0; i < n; i++) {//将测试点的横纵坐标分别存到数组中
int j = sc.nextInt();
int k = sc.nextInt();
Nx[i] = j;
Ny[i] = k;
}
for (int i = 0; i < n; i++) {//分别计算到测试点的距离
int m = (x-Nx[i])*(x-Nx[i])+(y-Ny[i])*(y-Ny[i]);
N[i]=m;
}
int t=N[0];
for(int i=0;i<n;i++) {//求取距离最小值,存到t中
if (N[i]<t) {
t=N[i];
}
}
int min =0;
for (int i = 0; i < n; i++) {//求取最小值对应的最近的编号,存到min中
if (N[i]==t) {
min = i;
break;
}
}
int p = t;
for (int i = 0; i < n; i++) {//求取最第二小的值,存到p中
if (N[i]>=t&&i!=min) {//判断若大于等于(防止一样)并且编号一样,考虑若和t一样大时,取了t的值,在后面的循环判断中就无法改变了。
p=N[i];
break;
}
}
for (int i = 0; i < n; i++) {//将次小值存到p中。
if (i==min) {
continue;
}else if (N[i]<p) {
p=N[i];
}
}
int min1 = 0;
for (int i = 0; i < n; i++) {//将次小值的编号存到min1中
if (N[i]==p&&i!=min) {//避免距离相等时,编号相等
min1=i;
break;
}
}
int q = p;
int min2 = 0;
for (int i = 0; i < n; i++) {//第三小值的存储,将第三小值存到q中。
if (N[i]>=p&&i!=min&&i!=min1) {//和p值存储的判断时一样的。
q=N[i];
break;
}
}
for (int i = 0; i < n; i++) {//存q值
if (i==min||i==min1) {//排除次小值和最小值
continue;
}else if (N[i]<q) {
q=N[i];
}
}
for (int i = 0; i < n; i++) {//将第三小值的编号存到min2中
if (N[i]==q&&i!=min&&i!=min1) {//避免重复
min2=i;
break;
}
}
System.out.print(min+1+"\n");//输出
System.out.print(min1+1+"\n");
System.out.print(min2+1+"\n");
}
}
总结
在java中,接口comparable使我们经常要接触到的,比如对集合或者数组进行排序,我们经常使用到Arrays.sort()或者Collections.sort().当集合中的对象是自定义的对象时,我们有两种方法能够使排序方法应用到自定义对象的集合(数组)中。下面我们介绍Comparable的用法。
Comparable的用法为: