Java 按尾长和字母顺序排序列表
我应该写一个排序列表的算法。 列表应按尾长排序。如果名单上的两只狗的尾巴长度相同,它们应该按字母顺序排列 我有一个名为getTailLength的方法,它返回狗的尾长。 到目前为止,我对排序算法的了解如下:Java 按尾长和字母顺序排序列表,java,list,sorting,arraylist,Java,List,Sorting,Arraylist,我应该写一个排序列表的算法。 列表应按尾长排序。如果名单上的两只狗的尾巴长度相同,它们应该按字母顺序排列 我有一个名为getTailLength的方法,它返回狗的尾长。 到目前为止,我对排序算法的了解如下: public void sortByName(ArrayList allDogs){ 对于(int i=1;i=0&¤tDogName .compareTo(allDogs.get(j).getName())
public void sortByName(ArrayList allDogs){
对于(int i=1;i=0&¤tDogName
.compareTo(allDogs.get(j).getName())<0){
allDogs.set(j+1,allDogs.get(j));
j--;
}
allDogs.set(j+1,currentDogName);
}
}
public void sortDogs(ArrayList allDogs){
对于(int i=1;iallDogs.get(j.getTailLength()){
集合。交换(所有狗,i,j);
}else if(currentMinTail==allDogs.get(i).getTailLength()){
sortByName(所有狗);
}
}
}
}
问题在于这行代码
allDogs.set(j+1,currentDogName);
我不确定这里要更改什么,因为它说Dog是必需的,但我比较的是字符串,而不是Dog,因为我比较的是名称?您必须为
所有dogs.set(index,Dog)
提供一个Dog实例
你比较字符串,但你仍然对狗进行排序
您可以使用allDogs.get(i).getName()获得currentDogName
代码>我不会在例程中更改,所以只需替换allDogs.set(j+1,currentDogName)使用allDogs.set(j+1,allDogs.get(i))代码>
总的来说,你的功能看起来很混乱。在助手函数“sortByName”中处理整个数组可能会导致错误
您应该执行以下操作之一:
使用“Collections.sort()”和“Compariable”接口
按尾部长度对数组排序,然后再次迭代以对具有相同尾部长度的所有狗进行排序
您必须向allDogs.set(index,Dog)
提供一个Dog实例
你比较字符串,但你仍然对狗进行排序
您可以使用allDogs.get(i).getName()获得currentDogName
代码>我不会在例程中更改,所以只需替换allDogs.set(j+1,currentDogName)使用allDogs.set(j+1,allDogs.get(i))代码>
总的来说,你的功能看起来很混乱。在助手函数“sortByName”中处理整个数组可能会导致错误
您应该执行以下操作之一:
使用“Collections.sort()”和“Compariable”接口
按尾部长度对数组排序,然后再次迭代以对具有相同尾部长度的所有狗进行排序
如果不是练习,正确的方法是将sortDogs()
替换为以下单行:
allDogs.sort(Comparator.comparingInt(Dog::getTailLength)
.thenComparing(Dog::getName));
如果不是练习,正确的方法是将sortDogs()
替换为以下单行:
allDogs.sort(Comparator.comparingInt(Dog::getTailLength)
.thenComparing(Dog::getName));
这看起来太复杂了。您是否考虑过使用Comaparable接口?因此,我想您可以使用dog对象本身,而不是创建字符串currentDogName
,但每次使用当前dog对象来比较其名称时,请使用currentDog.getName()
因此,我想说,获取所有狗的所有尾巴长度,将其放入一个集合,对它进行排序,然后调用SortByName方法,认为这将使您的工作更容易。这看起来太复杂了。您是否考虑过使用Comaparable接口?因此,我想您可以使用dog对象本身,而不是创建字符串currentDogName
,但每次使用当前dog对象来比较其名称时,请使用currentDog.getName()
因此,我想说,获取所有狗的所有尾巴长度,将其放入一个集合,对它进行排序,然后调用SortByName方法,认为这将使您的工作更轻松。