一、题目
1.原题
小明今年升学到小学一年级,
来到新班级后发现其他小朋友们身高参差不齐,
然后就想基于各小朋友和自己的身高差对他们进行排序,
请帮他实现排序。
2.题目理解
根据身高差从小到大排序。
二、思路与代码过程
1.思路
设置一个类Hd(int Height,int difference),然后用Comparator比较,Arrays.sort排序。
2.代码过程
①main函数
public static void main(String[] args) {
///*
Scanner sc = new Scanner(System.in);
System.out.println("请输入小明的身高:");
int xmH = sc.nextInt();
System.out.println("请输入小明同学的个数:");
int cmN = sc.nextInt();
System.out.println("请输入小明同学的身高:");
int[] clssmateH = new int[cmN];
for (int i = 0; i < cmN; i++) {
clssmateH[i] = sc.nextInt();
}
int[] resortH = sortByDifference(xmH,clssmateH);
System.out.println("根据身高差排序后:"+Arrays.toString(resortH));
//*/
/*eg:
int xiaoming = 158 ;
int[] students = {130, 144, 156, 163};
int[] resortH = sortByDifference(xiaoming,students);
System.out.println("根据身高差排序后:"+Arrays.toString(resortH));
*/
}
② sortByDifference函数
public static int[] sortByDifference(int xiaoming, int[] students) {
int len = students.length;
Hd[] xs = new Hd[len];
for (int i = 0; i < len; i++) {
xs[i] = new Hd(students[i], Math.abs(xiaoming - students[i]));
}
System.out.println(Arrays.toString(xs));
int[] resortH = new int[len];
Arrays.sort(xs, Comparator.comparingInt(Hd ::getDifference));
for (int i = 0; i < len; i++){
resortH[i] = xs[i].Hight;
}
return resortH;
}
③Hd类
public static class Hd{
int Hight;
int difference;
public Hd(int Height, int diffrenece){
this.Hight = Height;
this.difference = diffrenece;
}
public int getDifference(){
return difference;
}
public String toString(){
return "高:"+Hight+",差:"+difference+"\n";
}
}
三、运行结果
1.运行截图
2.完整代码
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class test26 {
public static void main(String[] args) {
///*
Scanner sc = new Scanner(System.in);
System.out.println("请输入小明的身高:");
int xmH = sc.nextInt();
System.out.println("请输入小明同学的个数:");
int cmN = sc.nextInt();
System.out.println("请输入小明同学的身高:");
int[] clssmateH = new int[cmN];
for (int i = 0; i < cmN; i++) {
clssmateH[i] = sc.nextInt();
}
int[] resortH = sortByDifference(xmH,clssmateH);
System.out.println("根据身高差排序后:"+Arrays.toString(resortH));
//*/
/*eg:
int xiaoming = 158 ;
int[] students = {130, 144, 156, 163};
int[] resortH = sortByDifference(xiaoming,students);
System.out.println("根据身高差排序后:"+Arrays.toString(resortH));
*/
}
public static int[] sortByDifference(int xiaoming, int[] students) {
int len = students.length;
Hd[] xs = new Hd[len];
for (int i = 0; i < len; i++) {
xs[i] = new Hd(students[i], Math.abs(xiaoming - students[i]));
}
System.out.println(Arrays.toString(xs));
int[] resortH = new int[len];
Arrays.sort(xs, Comparator.comparingInt(Hd ::getDifference));
for (int i = 0; i < len; i++){
resortH[i] = xs[i].Hight;
}
return resortH;
}
public static class Hd{
int Hight;
int difference;
public Hd(int Height, int diffrenece){
this.Hight = Height;
this.difference = diffrenece;
}
public int getDifference(){
return difference;
}
public String toString(){
return "高:"+Hight+",差:"+difference+"\n";
}
}
}