Java binarySearch return 被忽略
Java binarySearch return is being ignored
正如标题所暗示的那样,我正在编写一些代码来在 Java 中执行二进制搜索的一个版本。但是,我的 return 语句被忽略,函数 return 是最后一个 "catch all" return 语句,如下所示:
public int binarySearch(int min, int max) {
int mid = ((min+max)/2);
double[][] m1 = createFilledSquareMatrix(mid);
double[][] m2 = createFilledSquareMatrix(mid);
double[][] m3 = new double[mid][mid];
long time = analyzeMultiply(m1, m2, m3);
if(time == 1000) {
return mid;
}
if (time > 1000) {
m1 = createFilledSquareMatrix(mid-1);
m2 = createFilledSquareMatrix(mid-1);
m3 = new double[mid-1][mid-1];
time = analyzeMultiply(m1, m2, m3);
if(time <= 1000) {
return mid; //I am reached but ignored
}
else {
binarySearch(min, mid-1);
}
}
else {
System.out.println("here");
m1 = createFilledSquareMatrix(mid+1);
m2 = createFilledSquareMatrix(mid+1);
m3 = new double[mid+1][mid+1];
time = analyzeMultiply(m1, m2, m3);
if(time >= 1000) {
return mid+1; //I am reached but ignored
}
else {
binarySearch(mid+1, max);
}
}
return -2;
}
所以我评论了被忽略的return 语句。我检查了调试器,它执行了 return 但随后只是转到外部 return -2 语句,然后执行它。我以前从未遇到过此类问题,所以我觉得我缺少一些简单的东西。任何帮助,将不胜感激。
你的方法是递归的。这意味着每次递归时,您都需要对递归调用中的 returned 值进行处理。您看到的是递归调用到达终止点,return 一个值,然后冒泡退出。然而,由于进行递归调用的实例不会对 returned 值执行任何操作,它会继续执行,就好像什么也没发生一样,导致它返回到它的 "catch all" return ,等等。
例如,
else {
binarySearch(min, mid-1);
}
应该是
else {
return binarySearch(min, mid-1);
}
正如标题所暗示的那样,我正在编写一些代码来在 Java 中执行二进制搜索的一个版本。但是,我的 return 语句被忽略,函数 return 是最后一个 "catch all" return 语句,如下所示:
public int binarySearch(int min, int max) {
int mid = ((min+max)/2);
double[][] m1 = createFilledSquareMatrix(mid);
double[][] m2 = createFilledSquareMatrix(mid);
double[][] m3 = new double[mid][mid];
long time = analyzeMultiply(m1, m2, m3);
if(time == 1000) {
return mid;
}
if (time > 1000) {
m1 = createFilledSquareMatrix(mid-1);
m2 = createFilledSquareMatrix(mid-1);
m3 = new double[mid-1][mid-1];
time = analyzeMultiply(m1, m2, m3);
if(time <= 1000) {
return mid; //I am reached but ignored
}
else {
binarySearch(min, mid-1);
}
}
else {
System.out.println("here");
m1 = createFilledSquareMatrix(mid+1);
m2 = createFilledSquareMatrix(mid+1);
m3 = new double[mid+1][mid+1];
time = analyzeMultiply(m1, m2, m3);
if(time >= 1000) {
return mid+1; //I am reached but ignored
}
else {
binarySearch(mid+1, max);
}
}
return -2;
}
所以我评论了被忽略的return 语句。我检查了调试器,它执行了 return 但随后只是转到外部 return -2 语句,然后执行它。我以前从未遇到过此类问题,所以我觉得我缺少一些简单的东西。任何帮助,将不胜感激。
你的方法是递归的。这意味着每次递归时,您都需要对递归调用中的 returned 值进行处理。您看到的是递归调用到达终止点,return 一个值,然后冒泡退出。然而,由于进行递归调用的实例不会对 returned 值执行任何操作,它会继续执行,就好像什么也没发生一样,导致它返回到它的 "catch all" return ,等等。
例如,
else {
binarySearch(min, mid-1);
}
应该是
else {
return binarySearch(min, mid-1);
}