Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.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 - Fatal编程技术网

Java 相乘间隔

Java 相乘间隔,java,Java,我正在尝试创建此方法,但由于某些原因,它不起作用 public static Interval multiply(Interval x, Interval y) { int min = Math.min(x.lo * y.lo, x.hi * y.hi, x.hi * y.lo, x.hi * y.hi); int max = Math.max(x.lo * y.lo, x.hi * y.hi, x.hi * y.lo, x.hi * y.hi); return new Int

我正在尝试创建此方法,但由于某些原因,它不起作用

public static Interval multiply(Interval x, Interval y) {
   int min = Math.min(x.lo * y.lo, x.hi * y.hi, x.hi * y.lo, x.hi * y.hi);
   int max = Math.max(x.lo * y.lo, x.hi * y.hi, x.hi * y.lo, x.hi * y.hi);
   return new Interval(min, max);
它与Math.min/Math.max有关,但我查找了它,所以我不确定我是如何正确使用它的???

丑陋,但是:

public static Interval multiply(Interval x, Interval y) {
   int min = Math.min(Math.min(Math.min(x.lo * y.lo, x.hi * y.hi), x.hi * y.lo), x.hi * y.hi);
   int max = Math.max(Math.max(Math.max(x.lo * y.lo, x.hi * y.hi), x.hi * y.lo), x.hi * y.hi);
   return new Interval(min, max);

可以说我疯了,但是因为区间的乘法从来没有使用它自己的高和低,根据定义,低和高的结果将是低*低和高*高,只要数字是正数。只要您明确知道数字始终为正(就像您正在使用时间),您可以这样做:

public static Interval multiply(Interval x, Interval y){
   return new Interval(x.lo*y.lo, x.hi*y.hi);
}
如果您不确定,可以尝试以下方法:

public static Interval multiply(Interval x, Interval y){
   int min = (x.lo*y.lo <= x.lo*y.hi) ? x.lo*y.lo: x.lo*y.hi;
   min = (min <= x.hi*y.lo) ? min: x.hi*y.lo;
   min = (min <= x.hi*y.hi) ? min: x.hi*y.hi;
   int max = (x.lo*y.lo >= x.lo*y.hi) ? x.lo*y.lo: x.lo*y.hi;
   max = (max >= x.hi*y.lo) ? max: x.hi*y.lo;
   max = (max >= x.hi*y.hi) ? max: x.hi*y.hi;
   return new Interval(min, max);
}
公共静态区间乘法(区间x、区间y){
int min=(x.lo*y.lo=x.hi*y.hi)?max:x.hi*y.hi;
返回新间隔(最小、最大);
}

可能有更好的方法使用位运算符来完成这些比较,但我不知道如何。

函数
Math.min
Math.max
只使用两个参数。这是你真正的密码吗?如果是的话,它是不可编译的。只是出于好奇,你在用Joda吗?