我必须列出飞行小时的飞行员名单,然后选择升序和降序。 我提出了提升选择性的小时数,但我不知道如何让程序根据小时数显示名称的升序。
这就是我所做的。 你能救我吗?
int arr[]={50,150,100,250,200,24,376,541,56,164};
int arrLength = arr.length;
for(int i=0;i<arrLength-1;i++){
int min=i;
for (int k=i+1;k<arrLength;k++){
if(arr[k]<arr[min]){
min = k;
}
}
if (i != min) {
int temp=arr[i];
arr[i]=arr[min];
arr[min]=temp;
}
}
for (int j=0;j<arrLength;j++) {
System.out.println(arr[j]+" ");}
}
}
答案 0 :(得分:1)
您使用交换功能。执行此操作时,您将在索引之间交换小时值。那么,那么你也应该交换相应的飞行员名字。这种方式对于每次交换,飞行员也将被交换。
我所说的交换功能是:
int temp=arr[i];
arr[i]=arr[min];
arr[min]=temp;
做类似的事情:
String tempName = names[i];
names[i] = names[min];
names[min] = tempName;
要考虑的另一件事是创建一个Pilot
类。在这样做时,您将保持OOP概念并且可以更轻松地处理排序。
例如,
public class Pilot implements Comparable<Pilot> {
int hours;
String name;
public Pilot(String name, int hours){
this.name = name;
this.hours = hours;
}
@Override
public int compareTo(Pilot other){
return hours.compareTo(other.hours);
}
}
然后,您可以使用Pilot#compareTo(Pilot)
功能找出如何根据小时数对飞行员进行排序,甚至完全改变您希望从那里对其进行排序的方式。
答案 1 :(得分:1)
使用TreeMap
存储Pilot的飞行时间,然后Java会根据值自动对其进行排序(将其作为小时数)。
设置一个HashTree
public static Map<String, Integer> pilots = new TreeMap<String, Integer>();
然后为其添加值:
pilots.put(pilot,pilotHours);
在您的情况下,您可以使用一些看起来像这样的代码(来自给定的代码):
import java.util.Map;
import java.util.TreeMap;
public class Test {
public static Map<String, Integer> pilots = new TreeMap<String, Integer>();
public static void main(String[] args) {
int arr[] = { 50, 150, 100, 250, 200, 24, 376, 541, 56, 164 };
int arrLength = arr.length;
for (int i = 0; i < arrLength - 1; i++) {
int min = i;
for (int k = i + 1; k < arrLength; k++) {
if (arr[k] < arr[min]) {
min = k;
}
}
if (i != min) {
int temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}
for (int j = 0; j < arrLength; j++) {
System.out.println(arr[j] + " ");
}
for (int p = 0; p < arrLength; p++) {
int pilotHours = arr[p];
String pilot = "PILOT NAME, HOWEVER YOU GET IT";
pilots.put(pilot, pilotHours);
}
System.out.println(pilots);
}
}
在调整它以适合您的代码后,告诉我它是怎么回事。
主要答案/建议是使用TreeMap
答案 2 :(得分:1)
将飞行员的名字与相应的小时数组合在一起。仅使用小时数作为选择排序的排序标准对此(数字,小时)对数组进行排序。然后遍历已排序的对数组并仅显示导频的名称,它们将按预期顺序排列。
相关的解决方案是使用(索引,小时)对,其中index指的是您的原始导频名称数组。遍历排序的对数组时,可以使用此索引在原始数组中引用匹配的导频名称。这种方法避免了在对数组中复制导频名称数组,以防您对输入或内存使用有限制。
第二个解决方案的实现看起来像这样(保留了大部分原始代码):
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList<String> nameArr=new ArrayList<String>();
nameArr.add("John");
nameArr.add("Robert");
nameArr.add("Duncan");
nameArr.add("Steve");
nameArr.add("Adrian");
nameArr.add("Paul");
nameArr.add("Michael");
nameArr.add("Andrew");
nameArr.add("Henry");
nameArr.add("Bradley");
int arr[]={50,150,100,250,200,24,376,541,56,164};
int arrLength = arr.length;
assert arrLength == nameArr.size();
int indexArr[]=new int[arrLength];
for(int i=0;i<arrLength;i++){
indexArr[i]=i;
}
for(int i=0;i<arrLength-1;i++){
int min=i;
for (int k=i+1;k<arrLength;k++){
if(arr[k]<arr[min]){
min = k;
}
}
if (i != min) {
int temp=arr[i];
arr[i]=arr[min];
arr[min]=temp;
temp=indexArr[i];
indexArr[i]=indexArr[min];
indexArr[min]=temp;
}
}
for (int j=0;j<arrLength;j++) {
int index=indexArr[j];
String name=nameArr.get(index);
System.out.println(name);
}
}
}