Sortierung Objekt mit Komparator gibt Null-Zeiger
Ich versuche Sortieren der ArrayList mit der 3-Karte in es. Ich mache das mit einem Komparator. (Ist das zuviel)? - Karte.getRank() gibt eine ganze Zahl zwischen 2 und 14. Ich habe absolut keine Ahnung, wohin ich gehe falsch. Ich habe dies getan, erfolgreich vor, und verglichen mit meinen anderen code, und es scheint, die gleichen. Ich wäre dankbar, wenn jemand verbreiten könnte etwas Licht in diese!
public int getHand(Card c1, Card c2, Card c3) {
ArrayList<Card> hand = new ArrayList<Card>();
hand.add(c1);
hand.add(c2);
hand.add(c3);
Collections.sort(hand, new SortCards());
package com.evorlor.threecardpoker;
import java.util.Comparator;
public class SortCards implements Comparator<Card> {
@Override
public int compare(Card card1, Card card2) {
if ((card1.getRank() - card2.getRank()) > 0) {
return 1;
}
if ((card1.getRank() - card2.getRank()) < 0) {
return -1;
}
return 0;
}
}
LOGCAT:
08-06 18:32:56.155: E/AndroidRuntime(4906): FATAL EXCEPTION: main
08-06 18:32:56.155: E/AndroidRuntime(4906): java.lang.IllegalStateException: Could not execute method of the activity
08-06 18:32:56.155: E/AndroidRuntime(4906): at android.view.View$1.onClick(View.java:3599)
08-06 18:32:56.155: E/AndroidRuntime(4906): at android.view.View.performClick(View.java:4204)
08-06 18:32:56.155: E/AndroidRuntime(4906): at android.view.View$PerformClick.run(View.java:17355)
08-06 18:32:56.155: E/AndroidRuntime(4906): at android.os.Handler.handleCallback(Handler.java:725)
08-06 18:32:56.155: E/AndroidRuntime(4906): at android.os.Handler.dispatchMessage(Handler.java:92)
08-06 18:32:56.155: E/AndroidRuntime(4906): at android.os.Looper.loop(Looper.java:137)
08-06 18:32:56.155: E/AndroidRuntime(4906): at android.app.ActivityThread.main(ActivityThread.java:5041)
08-06 18:32:56.155: E/AndroidRuntime(4906): at java.lang.reflect.Method.invokeNative(Native Method)
08-06 18:32:56.155: E/AndroidRuntime(4906): at java.lang.reflect.Method.invoke(Method.java:511)
08-06 18:32:56.155: E/AndroidRuntime(4906): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
08-06 18:32:56.155: E/AndroidRuntime(4906): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
08-06 18:32:56.155: E/AndroidRuntime(4906): at dalvik.system.NativeStart.main(Native Method)
08-06 18:32:56.155: E/AndroidRuntime(4906): Caused by: java.lang.reflect.InvocationTargetException
08-06 18:32:56.155: E/AndroidRuntime(4906): at java.lang.reflect.Method.invokeNative(Native Method)
08-06 18:32:56.155: E/AndroidRuntime(4906): at java.lang.reflect.Method.invoke(Method.java:511)
08-06 18:32:56.155: E/AndroidRuntime(4906): at android.view.View$1.onClick(View.java:3594)
08-06 18:32:56.155: E/AndroidRuntime(4906): ... 11 more
08-06 18:32:56.155: E/AndroidRuntime(4906): Caused by: java.lang.NullPointerException
08-06 18:32:56.155: E/AndroidRuntime(4906): at com.evorlor.threecardpoker.SortCards.compare(SortCards.java:10)
08-06 18:32:56.155: E/AndroidRuntime(4906): at com.evorlor.threecardpoker.SortCards.compare(SortCards.java:1)
08-06 18:32:56.155: E/AndroidRuntime(4906): at java.util.TimSort.countRunAndMakeAscending(TimSort.java:320)
08-06 18:32:56.155: E/AndroidRuntime(4906): at java.util.TimSort.sort(TimSort.java:185)
08-06 18:32:56.155: E/AndroidRuntime(4906): at java.util.TimSort.sort(TimSort.java:169)
08-06 18:32:56.155: E/AndroidRuntime(4906): at java.util.Arrays.sort(Arrays.java:2038)
08-06 18:32:56.155: E/AndroidRuntime(4906): at java.util.Collections.sort(Collections.java:1891)
package com.evorlor.threecardpoker;
public class Card {
private int rank;
private char suit;
public Card(int rank, char suit) {
super();
this.rank = rank;
this.suit = suit;
}
public int getRank() {
return rank;
}
public char getSuit() {
return suit;
}
}
- sehen, was ist null-Komparator
- Können wir den code für
Card
? - sicher. krank post jetzt
- In diesem Fall, sind Sie sicher, dass Sie nicht vorbei
null
zugetHand
? - oh wow. das ist peinlich. ich habe nie instanziiert (richtige Wort?) die Karte
- Eines der
Card
Objekte null ist, oder einer von Ihnen ist null zurückgeben vongetRank()
. Ich empfehle, lernen Sie den debugger verwenden. - Karte war null. sorry für die Verschwendung der ur Zeit auf diesen einen. weiß nicht, wie ich vergessen habe, das zu tun. habe vor mir selbst
- Gern nehmen die Antwort, wenn Sie Ihr Problem gelöst
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einen Weg, den Sie halten können, dies zu verhindern in der Zukunft, ist ein null-check. Bei der Codierung, Sie wollen sicher sein, dass Sie Situationen wie diese. Eine Möglichkeit könnte so Aussehen:
Einen/Mehrere Karten übergeben
getHand(Card c1, Card c2, Card c3)
null sindSie können Behauptung überprüfen Sie in der ersten Zeile der
getHand(Card c1, Card c2, Card c3)
wie unten
ODER
Führen Sie es im debugger, während Sie mit einem Haltepunkt in
getHand(Card c1, Card c2, Card c3)
getRank
ist nicht das problemCard
. Ich dachte, ich würde sicherstellen, dass Sie sah, die neue info, bevor die downvotes beginnen Rollen.