当前位置: 首页 > 知识库问答 >
问题:

使用断言添加前后条件

李联
2023-03-14

这是我正在做的一个任务。其中一个要求是向某个类添加前置条件和后置条件。我仍在学习什么是前置条件和后置条件,但更重要的是,我如何实现它们?

原始赋值问题在这里:“编写一个程序,显示一个构造函数将构造函数故障的信息传递给异常处理程序。定义一个类,它会在构造函数中抛出一个异常。您的程序应该尝试创建一个对象类型为某个类,并捕获从构造函数抛出的异常。

import java.util.Scanner;

public class Demo3 {
    public static void main(String[] args) {
        Scanner scan=new Scanner(System.in);
        System.out.println("Enter a number between 0 and 10:");
        int a=scan.nextInt();
        System.out.println("Enter another number between 0 and 10:");
        int b=scan.nextInt();
        SomeClass testException;
        try
        {
            testException = new SomeClass(a,b);
        }
        catch(Exception e)
        {
           System.out.println("Exception occurred: "+e.getMessage());
        }
    }
}

public class SomeClass {
    int a;
    int b;
    public SomeClass (int a, int b) throws Exception {
        assert (a >= 0 && a <= 10) : "bad number: " + a;
        if(a<0 || a > 10){System.out.println("Try again!");}
        assert (b >= 0 && b <= 10) : "bad number: " + b;
        if(b<0 || b > 10){System.out.println("Try again again!");}
        throw new Exception("You've got an error!");
    } 
}

共有1个答案

邬承悦
2023-03-14

言语句将在失败时抛出断言错误。但是,断言语句必须使用 JVM 参数手动启用,因为它们在生产代码中默认处于关闭状态。这不适合您的作业。

如果您的要求是抛出<code>AssertionError</code>,那么可以显式抛出:

public SomeClass (int a, int b) { 
    if (a < 0 || a > 10) {
        throw new AssertionError("the first param is out of valid range: " + a);
    }
    if (b < 0 || b > 10) {
        throw new AssertionError("the second param is out of valid range: " + b);
    }

    // at this point the pre-conditions have been validated
    this.a = a;
    this.b = b;
}

我省略了抛出子句,因为 AssertionError 不是经过检查的异常,不需要声明它。

最后,在您的代码中,< code >抛出新的异常(“您有一个错误!”); at作为构造函数的最后一条语句将始终运行,即使参数是正确的。所以这种说法没有任何意义。

 类似资料:
  • 问题内容: 如果响应包含“已完成”或“正在处理,将需要一些时间来处理”,我希望在两种情况下都可以通过请求。 但是,如果我将这两个断言都包含在响应断言中,它将视为“和”。只有双方都满意,它才会通过。在这里,任何一项就足够了。请提出建议。 问题答案: 您将需要一个支持脚本的断言,即Beanshell断言 将Beanshell断言添加为请求的子项,该请求将返回“已完成”或“正在进行”消息 将以下代码放入

  • 有时候我们需要匹配后面跟着特定模式的一段模式。比如,我们要从 1 turkey costs 30€ 这段字符中匹配价格数值。 我们需要获取 € 符号前面的数值(假设价格是整数)。 那就是前瞻断言要做的事情。 前瞻断言 语法为:x(?=y),它表示 “匹配 x, 仅在后面是 y 的情况"” 那么对于一个后面跟着 € 的整数金额,它的正则表达式应该为:\d+(?=€)。 let str = "1 tu

  • 小结:我想在测试中使用模块断言。 之前,我使用PHPUnit测试了Symfony2服务。这没关系,但我想使用Codeception Symfony2模块提供的一些功能以及更干净的测试风格。 我使用以下服务创建了一个新套件。suite.yml 我运行了构建和生成: cest,并有一个ServiceCest.php测试文件 此测试通过,因为我在serviceheloper.php文件中添加了断言函数。

  • 使用条件判断,可以让make根据运行时的不同情况选择不同的执行分支。条件表达式可以是比较变量的值,或是比较变量和常量的值。 示例 下面的例子,判断$(CC)变量是否“gcc”,如果是的话,则使用GNU函数编译目标。 libs_for_gcc = -lgnu normal_libs = foo: $(objects) ifeq ($(CC),gcc) $(CC) -o foo $(objects

  • 使用条件判断,可以让make根据运行时的不同情况选择不同的执行分支。条件表达式可以是比较变量的值, 或是比较变量和常量的值。 示例 下面的例子,判断 $(CC) 变量是否 gcc ,如果是的话,则使用GNU函数编译目标。 libs_for_gcc = -lgnu normal_libs = foo: $(objects) ifeq ($(CC),gcc) $(CC) -o foo $(o

  • 我试着 我在调试时获得和是。 如何在使用时断言大于条件