Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的前置条件与后置条件?_Java_Preconditions_Post Conditions - Fatal编程技术网

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测试的存在没有逻辑联系。它们与断言语句的关系更为密切。