我已经掌握了插入代码的基础知识,但我仍然坚持如何将它与其他条件进行比较(按A-Z,Z-A列出)
例如,给出了员工队伍列表:
public static final String[] staffrank = {
"Trainee",
"Junior",
"Senior",
"Administrator"
};
我有一个compareRank
的方法如果它返回0意味着他们的排名相同(员工1和员工2)
如果它返回-1则表示员工1的级别低于员工2
如果它返回1则意味着员工1的级别高于员工2
然后我在void main
中有一份工作人员名单Staff[] snames;
int countname=0;
snames = new Staff[50];
snames[countname++] = new Staff("Amy","Trainee");
snames[countname++] = new Staff("Annie","Junior");
snames[countname++] = new Staff("Tom","Administrator");
snames[countname++] = new Staff("Dave","Trainee");
snames[countname++] = new Staff("Gary","Junior");
snames[countname++] = new Staff("Donna","Senior");
然后插入排序比较代码
public static void insertionSortbyRank(Staff[] snames, int countname) {
//insertion sort
for(int i =1; i < countname; i++) {
int j = i;
int comparerank = Staff.compareRank(snames[j],snames[j-1]);
String name = snames.getName();
String rank = snames.getRank();
//if staff is lower rank
if(comparerank==-1) {
然后我不确定在循环中放入什么 仍然给我一个未分类列表
while( j >0 && rank.compareRank(list[j], list[j - 1]) == 1))) {
list[j].rank =[j-1].rank;
list.[j].name = [j-1].name;
j--;
}
然后结束正在替换新值
snames[j].name = name;
snames[j].rank = rank;
输出假定给出:(根据图表按照从低到高的顺序排列)
艾美,实习生 戴夫,实习生 安妮,少年 加里,少年 唐娜,高级 汤姆,管理员任何帮助都会受到赞赏..谢谢你
答案 0 :(得分:0)
我认为既然你已经获得了一个staffrank
变量,你应该可以使用它。但是,除了在问题的顶部提及它之外,你没有使用它我们已经被展示过......所以我的假设是你完全忽略了它。
我认为这是你谜题的关键。
请注意,我忽略了字符串数组不是最佳表示的事实(我会选择enum
或类似的东西......可能在某处实现Comparable<StaffRank>
...但这毕竟是一个测试问题......)
答案 1 :(得分:0)
你可以制作这样的函数:
public static final int compareRank(String[] ranks, String rank) {
for (int i=0; i<ranks.length; i++) {
String string = ranks[i];
if string.equals(rank) return i;
}
return -1;
}
这将返回-1和(rank.length -1)之间的整数,您可以将其用于比较。数字越小,排名越低。
在你的while循环中你必须比较每个员工,如果“i”级员工大于“i + 1”级员工,则需要交换他们。
for (int i=0; i<(snames.length-1); i++) {
Staff sname1 = sname[i];
Staff sname2 = sname[i+1]
//compare sname1 to sname2 and swap if sname1 > sname2
}