当前位置: 首页 > 面试题库 >

断言不起作用

祖翰音
2023-03-14
问题内容

我正在尝试编写一个断言,以检查用户提供的大小是否为正值,如果不是,则使其为正,此语句位于类构造函数内部,该类构造函数采用大小值,然后生成array
[size]。我写了下面的代码,我认为是正确的。

    public Grid(int size) {


    try{
        assert size > 0 ;
    }
    catch(AssertionError e){
        size = Math.abs(size);
    }

    setLayout(new GridLayout(size, size));
    grid = new JButton[size][size];
}

尽管我似乎从未评估过我的断言并继续执行程序,但会导致NegativeArraySize错误(我正在尝试避免)

我也尝试过

assert size>0;

并且程序无法停止为负值。

我最近在Mac上运行Java时遇到了一些问题,所以我不知道我的代码是否正确,或者它只是那些奇怪的Mac怪癖之一!并且应该只使用

size=Math.abs(size);

谢谢山姆,


问题答案:

您需要使用-ea开关运行程序(启用断言),否则assertJVM将完全不运行任何指令。依靠断言有些危险。我建议你做这样的事情:

public Grid(int size) {
    size = Math.max(0, size) 
    setLayout(new GridLayout(size, size));
    grid = new JButton[size][size];
}

甚至像这样:

public Grid(int size) {
    if(size < 0) {
        throw new IllegalArgumentException("cannot create a grid with a negative size");
    } 
    setLayout(new GridLayout(size, size));
    grid = new JButton[size][size];
}

第二个建议的好处是向您显示了代码其他部分中潜在的编程错误,而第一个建议则无提示地忽略了它们。这取决于您的用例。



 类似资料:
  • 问题内容: 我正在使用python 2.7.2,sqlalchemy 0.7,unittest,eclipse 3.7.2和pydev 2.4进行项目。我正在python文件(单元测​​试文件)中设置断点,但是它们被完全忽略了(在某些时候,它们起作用了)。到现在为止,我已经升级了所有相关软件(参见上文),开始了新项目,使用设置进行播放,将屏幕催眠,但是没有任何效果。 我从某篇文章中得到的唯一想法是

  • 我的自定义方言与处理器不解析任何值,我不知道为什么。在生成的视图中,${Content}应该在的地方没有任何东西,在将标签更改为th: text后,它会出现。我使用Spring Boot v1.5.9。发布,Springv4.3.13。发布 pom.xml依赖(它的子模块) LineSeparator处理器。JAVA 我的方言。JAVA 胸腺onfiguration.java 看法html

  • 我使用Assert来验证如下字段 现在,当我在html中使用表单时。细枝 一切都很好,如果我有一个空字段,我得到了我的消息,但当我试图像 我得到的消息类似于默认消息,我无法添加广告,但在我的字段旁边没有消息。我做错了什么? 我已经尝试在每个表单字段中使用novalidate属性,但它仍然不起作用

  • HttpCusputiveErrors:1(对于500响应)时断路器不跳闸。所有请求都通过并给出500。断路器应跳闸,并应返回503(维修不可用)。 按照断路器设置的步骤操作。 httpbin启动后,您可以用它模拟500请求: 运行这将模拟20个请求返回500。 但是,如果您已经应用了断路器,if应该只允许一个请求为500,其余的请求应该被跳闸,并且应该返回一个503。这是不会发生的。就githu

  • 问题内容: 我已经在exit和_exit和我的程序(多线程应用程序,在linux 2.6.16.46-0.12 sles10上运行)上设置了断点,但仍以某种我无法找到的方式退出 退出函数驻留在libc中,因此没有延迟的负载共享库问题。有人知道其他无法捕获的神秘触发吗? 编辑:问题现在仅是学术性的。我尝试了二进制搜索调试,撤消了部分更改(问题消失了)。再次按顺序应用它们之后,即使恢复到原始状态,我也

  • 问题内容: 我们正在使用BigQuery Python API进行一些分析。为此,我们创建了以下适配器: 哪里是构建对象。 其主要目的是将数据流式传输到给定的表。如果该表已经存在并且“如何”输入作为“ WRITE_TRUNCATE”传递,则该表首先被删除并再次创建。之后,继续进行数据流。 当不一次又一次删除表时,一切工作正常。 举例来说,这是结果,当我们没有模拟写截断选项(一运行该脚本循环不断给你