java中的前置条件与后置条件?
例如,我有以下代码:java中的前置条件与后置条件?,java,preconditions,post-conditions,Java,Preconditions,Post Conditions,例如,我有以下代码: public class Calc(){ final int PI = 3.14; //is this an invariant? private int calc(int a, int b){ return a + b; //would the parameters be pre-conditions and the return value be a post-condition? } } 我只是对这些术语的确切含义感到困惑?上
public class Calc(){
final int PI = 3.14; //is this an invariant?
private int calc(int a, int b){
return a + b;
//would the parameters be pre-conditions and the return value be a post-condition?
}
}
我只是对这些术语的确切含义感到困惑?上面的代码就是我所认为的,但是有人能用我的理论为我指出正确的方向吗?只是一个警告,将浮点数3.14转换为整数会给你带来麻烦。您可能希望将其转换为浮动:
final float PI = 3.14f;
final表示变量不能再更改
a和b只是传递到calc中的参数。以前,它们可以被调用,但在calc中,您可以将它们称为a和b
所以你可以有这个:
int foo = 5;
int bar = 7;
int sum = calc(foo, bar); //12
警告一下,将浮点数3.14转换为整数会给您带来麻烦。您可能希望将其转换为浮动:
final float PI = 3.14f;
final表示变量不能再更改
a和b只是传递到calc中的参数。以前,它们可以被调用,但在calc中,您可以将它们称为a和b
所以你可以有这个:
int foo = 5;
int bar = 7;
int sum = calc(foo, bar); //12
您的代码与其他代码位和代码段签订了合同。先决条件本质上是最初必须满足的条件,以便您的代码保证它将执行它应该执行的操作 例如,二进制搜索的先决条件是必须对正在搜索的内容进行排序 另一方面,如果满足前置条件,则后置条件是代码保证的。例如,在二进制搜索的情况下,我们保证找到我们正在搜索的内容的位置,或者在没有找到任何内容的情况下返回-1
先决条件几乎就像参数上的另一件事。它们通常不会直接影响代码,但当其他人使用您的代码时,它会很有用,因此他们会正确地使用您的代码。您的代码与其他代码位和代码段有契约关系。先决条件本质上是最初必须满足的条件,以便您的代码保证它将执行它应该执行的操作 例如,二进制搜索的先决条件是必须对正在搜索的内容进行排序 另一方面,如果满足前置条件,则后置条件是代码保证的。例如,在二进制搜索的情况下,我们保证找到我们正在搜索的内容的位置,或者在没有找到任何内容的情况下返回-1
先决条件几乎就像参数上的另一件事。它们通常不会直接影响代码,但当其他人使用您的代码时,它很有用,因此他们可以正确地使用代码。不变量是先决条件和后决条件的组合。它必须在调用方法之前和之后有效。在运行方法之前,必须先填充先决条件,然后再填充后置条件 Java没有内置的条件检查机制,但这里有一个小例子
public class Calc {
private int value = 0;
private boolean isValid() {
return value >= 0;
}
// this method has the validity as invariant. It's true before and after a successful call.
public void add(int val) {
// precondition
if(!isValid()) {
throw new IllegalStateException();
}
// actual "logic"
value += val;
// postcondition
if(!isValid()) {
throw new IllegalStateException();
}
}
}
如您所见,这些条件可能会被违反。在这种情况下,您通常在Java中使用异常。不变量是前置条件和后置条件的组合。它必须在调用方法之前和之后有效。在运行方法之前,必须先填充先决条件,然后再填充后置条件
private int calc(int a, int b){
return a + b;
//would the parameters be pre-conditions and the return value be a post-condition?
}
Java没有内置的条件检查机制,但这里有一个小例子
public class Calc {
private int value = 0;
private boolean isValid() {
return value >= 0;
}
// this method has the validity as invariant. It's true before and after a successful call.
public void add(int val) {
// precondition
if(!isValid()) {
throw new IllegalStateException();
}
// actual "logic"
value += val;
// postcondition
if(!isValid()) {
throw new IllegalStateException();
}
}
}
如您所见,这些条件可能会被违反。在这种情况下,您通常在Java中使用异常
private int calc(int a, int b){
return a + b;
//would the parameters be pre-conditions and the return value be a post-condition?
}
是一个函数,它接受两个int并返回一个int,即a和b的总和
您通常会在main中将calc函数调用为
public static void main(String[] args)
{
int a = 3, b = 4;
int sum = calc(a, b);
}
执行此操作时,a和b的副本将传递给calc,但a和b的原始值不受calc函数的影响,因为在Java中参数是按值传递的
是一个函数,它接受两个int并返回一个int,即a和b的总和
您通常会在main中将calc函数调用为
public static void main(String[] args)
{
int a = 3, b = 4;
int sum = calc(a, b);
}
执行此操作时,a和b的副本将传递给calc,但a和b的原始值不受calc函数的影响,因为在Java中参数是按值传递的。前提条件是函数所采用的参数必须为真。所以说变量是什么是不够的,但是你需要说一些关于它们的性质。例如,a和b必须是整数。post条件说明函数完成后必须为真的内容。在你的例子中,你的函数必须产生a和b的和。前置条件和后置条件实际上可以产生两种方法,特别是在Java这样的语言中。如果你有一个先决条件,简单地说,这两个参数必须是数值的。那么你不仅要考虑整数,还要考虑浮点
希望有帮助 前提条件是函数所采用的参数必须为真 锿。所以说变量是什么是不够的,但是你需要说一些关于它们的性质。例如,a和b必须是整数。post条件说明函数完成后必须为真的内容。在你的例子中,你的函数必须产生a和b的和。前置条件和后置条件实际上可以产生两种方法,特别是在Java这样的语言中。如果你有一个先决条件,简单地说,这两个参数必须是数值的。那么你不仅要考虑整数,还要考虑浮点
希望有帮助 有趣的int PI=3.14,没有编译器问题?有趣的int PI=3.14,没有编译器问题?都是真的,但这与OP关于术语前置条件和后置条件的问题有什么关系?我以为他问错了问题。他的代码中没有if/else,因此没有条件。前置/后置条件和不变量是独立的,与代码中if/else测试的存在没有逻辑联系。它们与断言语句的关系更为密切。都是真的,但这与OP关于先决条件和后决条件的问题有什么关系呢?我想他问错了问题。他的代码中没有if/else,因此没有条件。前置/后置条件和不变量是独立的,与代码中if/else测试的存在没有逻辑联系。它们与断言语句的关系更为密切。