05. august 2003 - 15:03Der er
15 kommentarer og 2 løsninger
Sorter et LinkedList.
Hejsa, Jeg har lavet denne funktion der shuffler objekterne i en linkedlist:
public void shuffleAllTheCards() { int cardAmount; cardAmount = allTheCards.size();
for(int i = 0; i <= cardAmount; i++) { Collections.shuffle(allTheCards); } System.out.println("\n INFO: The deck is now shuffled"); }
Jeg skal nu have lavet en funktion, der sortere objekterne igen, så de var på samme måde som før de blev shufflet, og der har jeg prøvet dette:
public void sortAllTheCards() { Collections.sort(allTheCards); }
Men det virker ikke rigtigt. Der kommer denne exeption:
Exception in thread "main" java.lang.ClassCastException at java.util.Arrays.mergeSort(Arrays.java:1122) at java.util.Arrays.mergeSort(Arrays.java:1129) at java.util.Arrays.mergeSort(Arrays.java:1129) at java.util.Arrays.mergeSort(Arrays.java:1129) at java.util.Arrays.sort(Arrays.java:1073) at java.util.Collections.sort(Collections.java:109) at solution.Deck.sortAllTheCards(Deck.java:167) at solution.UserInterface.sortAllTheCards(UserInterface.java:105) at solution.UserInterface.startProgram(UserInterface.java:48) at solution.RunMe.main(RunMe.java:21)
public class SortLinkedList { public static void main(String[] args) { List lst = new LinkedList(); lst.add("CCC"); lst.add("BB"); lst.add("A"); for(int i = 0; i < lst.size(); i++) { System.out.println((String)lst.get(i)); } Collections.sort(lst); for(int i = 0; i < lst.size(); i++) { System.out.println((String)lst.get(i)); } } }
public class SortLinkedListComplex { public static void main(String[] args) { List lst = new LinkedList(); lst.add(new Data("CCC","1")); lst.add(new Data("BB", "2")); lst.add(new Data("A", "3")); for(int i = 0; i < lst.size(); i++) { System.out.println((Data)lst.get(i)); } Collections.sort(lst, new Cmp()); for(int i = 0; i < lst.size(); i++) { System.out.println((Data)lst.get(i)); } } }
class Data { private String v1; private String v2; public Data(String v1, String v2) { this.v1 = v1; this.v2 = v2; } public String toString() { return (v1 + " " + v2); } public String getV1() { return v1; } public String getV2() { return v2; }
}
class Cmp implements Comparator { public int compare(Object o1, Object o2) { return ((Data)o1).getV1().compareTo(((Data)o2).getV1()); } public boolean equals(Object obj) { return false; } }
Jeg har lavet denne compareTo metode nu, og den virker også fint nok,hvor den sortere efter cardName, men hvordan udvider jeg den, så den efter at have sorteret carName, også sortere cardNumber??
public int compareTo(Object newCard) { int result = cardName.compareTo(((Card)newCard).cardName); return result; }
public int compareTo(Object newCard) { int result = cardName.compareTo(((Card)newCard).cardName); if(result == 0) { result = cardNumber.compareTo(((Card)newCard).cardNumber); } return result; }
public int compareTo(Object newCard) { int result = cardName.compareTo(((Card)newCard).cardName); if(result == 0) { result = cardNumber.compareTo(((Card)newCard).cardNumber); } return result; }
kommer der denne compile fejl:
int cannot be dereferenced return cardNumber.compareTo( temporary.cardNumber ); ^
Det er så fordi cardNumber er en int (simpel data type).
public int compareTo(Object newCard) { int result = cardName.compareTo(((Card)newCard).cardName); if(result == 0) { result = cardNumber - ((Card)newCard).cardNumber; } return result; }
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.