对于我的作业,我必须创建一个排序整数的方法和存储在对象类中的字符串。请记住,我必须使用案例。我想使用泛型,但我的老师使用1.4.2(没有泛型)对我进行INSISTS。我可以对时间进行排序,对于字母排序,我使用我的方法对时间进行排序并添加了compareTo。我玩了一下,但是当我输出它时,它按照我输入的顺序给了我输入的所有内容。不是按字母顺序排列。
这是我为存储输入而创建的类:
public class showInfo
{
String name;
String day;
int time;
}
以下是按名称排序的方法!
//method to sort and display info
public static void sortName(){
for(int i = 0; i < show.size() - 1; i++) {
for(int j = 0; j < show.size() - 1; j++){
if(((showInfo)show.get(i)).name.compareTo(((showInfo)show.get(i+1)).name) > 0){
showInfo temp = new showInfo();
temp.name = ((showInfo)show.get(j)).name;
temp.day = ((showInfo)show.get(j)).day;
temp.time = ((showInfo)show.get(j)).time;
((showInfo)show.get(j)).time = ((showInfo)show.get(i)).time;
((showInfo)show.get(j)).day = ((showInfo)show.get(i)).day;
((showInfo)show.get(j)).name = ((showInfo)show.get(i)).name;
((showInfo)show.get(i)).time = temp.time;
((showInfo)show.get(i)).day = temp.day;
((showInfo)show.get(i)).name = temp.name;
}
}
}
任何帮助都会很棒!提前致谢。 :)
(PS。我知道我需要将“showInfo”更改为“ShowInfo”,但是当我完成时我会这样做。)
答案 0 :(得分:3)
您的代码存在的一个问题是,您要将show.get(i)
与show.get(i+1)
进行比较,然后将show.get(i)
与show.get(j)
进行交换。你应该与show.get(j)
进行比较。此外,内部循环应该转到j < show.size()
而不是show.size() - 1
。最后,您可以在i + 1
而不是0
开始内循环。
一旦确定需要交换,只需交换列表中的引用,而不是交换每个字段,就可以做得更好:
showInfo tmp = (showInfo)show.get(i);
show.set(i, show.get(j));
show.set(j, tmp);
答案 1 :(得分:1)
我认为show
是List
,您必须按name
排序。
首先,让showInfo
实施Comparable
:
public class showInfo implements Comparable
{
String name;
String day;
int time;
public int compareTo(Object o)
{
showInfo other = (showInfo) o;
return name.compareTo(other.name);
}
}
然后,在列表中使用`Collections.sort()':
Collections.sort(show);
答案 2 :(得分:0)
您在此处错误地使用i
:
if(((showInfo)show.get(i)).name.compareTo(((showInfo)show.get(i+1)).name) > 0){
我相信第二个i
应该j
才能实现冒泡排序
if(((showInfo)show.get(i)).name.compareTo(((showInfo)show.get(j+1)).name) > 0){
答案 3 :(得分:0)
你可以这样做......
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
class myComparator implements Comparator {
public int compare(Object o1, Object o2) {
return ((o1.toString().charAt(0) > o2.toString().charAt(0)) ? 1 : (o1
.toString().charAt(0) == o2.toString().charAt(0)) ? 0 : -1);
}
}
public class Sample {
/**
* @param args
*/
public static void main(String[] args) {
List l = new ArrayList();
l.add("hello");
l.add("abc");
l.add("World");
l.add("hi");
System.out.println("Before sorting");
for (Object i : l) {
System.out.println(i.toString());
}
Collections.sort(l, new myComparator());
System.out.println("After sorting");
for (Object i : l) {
System.out.println(i.toString());
}
}
}
答案 4 :(得分:0)
不确定这是否是您所寻找的,它使用投射代替 generics ,无论如何,我希望这会有所帮助