使用比较器对对象进行排序给出空指针

2024-05-09

我正在尝试对包含 3 张卡的 ArrayList 进行排序。我正在用比较器来做这件事。 (这是否太过分了)? Card.getRank() 返回 2 到 14 之间的整数。我完全不知道哪里出了问题。我之前已经成功完成了这个,并与我的其他代码进行了比较,看起来是一样的。如果有人能对此有所了解,我将不胜感激!

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;
    }

}

防止将来发生这种情况的一种方法是进行空检查。编码时,您需要确保能够处理此类情况。一种方法可能如下所示:

public int getHand(Card c1, Card c2, Card c3) {

    if((c1 != null) && (c2 != null) && (c3 != null)){
        ArrayList<Card> hand = new ArrayList<Card>();
        hand.add(c1);
        hand.add(c2);
        hand.add(c3);

        Collections.sort(hand, new SortCards());
    }else{
        #handle your null card situation here
        System.out.println("One or more card is null");
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用比较器对对象进行排序给出空指针 的相关文章

随机推荐

  • 将 CSV 文件读入 Java 作为数据库表

    我发现了很多关于使用 Java 读取 CSV 的帖子 并且他们所指向的 API 在读取 CSV 文件时都采用了面向行的方法 就像 当你得到一行时 获取每一列的值 我希望有一个更高级别的 API 比如在 Perl 中 DBI 允许您在 CSV
  • socket.io 服务器的 Node.js 客户端

    我有一个正在运行的 socket io 服务器和一个带有 socket io js 客户端的匹配网页 一切正常 但是 我想知道是否可以在另一台机器上运行一个单独的 node js 应用程序 该应用程序将充当客户端并连接到提到的 socket
  • Python Tornado 中的异常处理

    我正在尝试处理发生的异常AsyncClient fetch这样 from tornado httpclient import AsyncHTTPClient from tornado httpclient import HTTPReques
  • 如何将 Angular 材质拖放与虚拟滚动集成?

    我正在尝试将 Angular 材质的虚拟滚动与拖放集成在一起 但由于某种原因 当我尝试实现此功能时 它会恢复项目 而当我尝试拖放元素时 它不起作用 这是代码摘要
  • python 正弦和余弦精度

    如何提高Python正弦和余弦精度 例如 我想使用以下代码 只需计算随机复向量 x 的 y cos acos x import numpy as np N 100000 x np zeros N 1j np zeros N for k in
  • 如何使用纯 CSS 始终使灵活的正方形在视口中居中?

    我知道这个问题 高度等于动态宽度 CSS 流体布局 https stackoverflow com questions 5445491 height equal to dynamic width css fluid layout 但我想要更
  • BOOST:递归shared_mutex?

    似乎Boost的shared mutex是非递归的 有没有解决这个问题的方法 无需重新实现整个内容 看一下这个线程 https stackoverflow com questions 4659295 why c0x standard com
  • Sqlite 删除速度极其慢 - 如何加快速度?

    我读到删除操作很慢 我想知道如何改进此检查 我有一个每天填充 10 15k 行的表 每次启动时我都需要清理所有超过 6 个月的记录 但是当数据库增长时 我开始遇到速度问题 当我运行此命令时 有接近 100 万条记录 即使我没有任何内容要删除
  • 卡片视图工具栏

    我有一个包含 CardView 的 RecyclerView 我想向每个 CardView 添加一个工具栏 其外观和行为类似于主工具栏 图标 标题 按钮 按钮 菜单 我从这里看到了 http blog grafixartist com cr
  • iPhone 6 隐藏在键盘下方的自动校正

    自动修正UITextview在 Iphone5s 中工作正常 但在 iPhone 6 中它被隐藏在键盘后面 在 iPhone 5s 中按预期工作 但不适用于 iphone 6 有什么办法可以解决 iPhone 6 上的这个问题吗 不 去物业
  • 如何使用 Scala 在 Spark 中漂亮地打印 JSON 数据帧?

    我有一个数据帧 我想将其作为有效的 json 写入 json 文件 我当前的代码如下所示 val df DataFrame myFun df toJSON saveAsTextFile myFile json 输出的格式为 如何将文件内容组
  • 网站首次访问时启动时间异常长(总共长达 68 秒)

    我有一个 ASP Net 应用程序 第一次访问时启动时间异常长 我做了一些跟踪 发现这个函数花费了 57 秒 Boolean System Web Compilation WebDirectoryBatchCompiler CompileN
  • 寄存器寻址模式与直接寻址模式

    我在试卷中遇到过这个问题 它指出 哪种给定的寻址模式更快 为什么 寄存器寻址方式 直接寻址方式 现在根据我的说法 寄存器寻址模式应该更快 因为寄存器是计算机中最快的存储位置 这是正确答案吗 请帮忙 谢谢 两种寻址模式之间的区别是 地址的来源
  • 运行“git gui”时如何跳过“松散对象”弹出窗口

    当我运行 git gui 时 我会看到一个弹出窗口 上面写着 This repository currently has approximately 1500 loose objects 然后它建议压缩数据库 我之前已经这样做过 它将松散对
  • ZeroMQ 在 python 多处理类/对象解决方案中挂起

    我正在尝试将 Python pyzmq 中的 ZeroMQ 与多处理一起使用 作为一个最小的 不是 工作示例 我有一个服务器类和一个客户端类 它们都继承自multiprocessing Process 客户端作为子进程应向服务器子进程发送消
  • 在 VS Code 中找不到 Git

    由于某种原因 我在 Windows 10 笔记本电脑上运行的 VS Code 中找不到 Git 在我的 Mac 上 当你一直向下滚动时 用户默认设置 中会出现一个 Git 但在我的 Windows 10 笔记本电脑上 它根本不存在 源代码管
  • 所有与 JSF 相关的 web.xml 上下文参数名称和值的概述 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 JavaServer Faces 有多种
  • Tweepy:tweepy.errors.Unauthorized:401 需要授权

    我期待使用以下 Tweepy 代码从我的 Twitter 个人资料中提取一些数据 import tweepy client tweepy Client consumer key consumer key consumer secret co
  • 使用 jQuery 选择访问过的链接

    我正在尝试通过 jQuery 选择所有访问过的链接 这是 HTML div class question summary a class question hyperlink Stuff a div If question hyperlin
  • 使用比较器对对象进行排序给出空指针

    我正在尝试对包含 3 张卡的 ArrayList 进行排序 我正在用比较器来做这件事 这是否太过分了 Card getRank 返回 2 到 14 之间的整数 我完全不知道哪里出了问题 我之前已经成功完成了这个 并与我的其他代码进行了比较