Java 方法返回";可选[0]”;整数的瞬间
你好,一个相当简单的问题:我应该编写一个方法split(int[]array,int-toSearch,int-lower,int-upper),它使用插值方法来找出拆分数组的位置。它应该返回要拆分的索引x。我的代码如下所示:Java 方法返回";可选[0]”;整数的瞬间,java,interpolation,optional,Java,Interpolation,Optional,你好,一个相当简单的问题:我应该编写一个方法split(int[]array,int-toSearch,int-lower,int-upper),它使用插值方法来找出拆分数组的位置。它应该返回要拆分的索引x。我的代码如下所示: private static int split(int[] array, int toSearch, int lower, int upper){ int x = 0; int v = toSearch; int l = lower; i
private static int split(int[] array, int toSearch, int lower, int upper){
int x = 0;
int v = toSearch;
int l = lower;
int r = upper;
x = l + (v-array[l])/(array[r]-array[l])*(r-l);
return x;
}
private static int search(int[] array, int toSearch){
int Stelle = 0;
if(array.length > 0){
int v = toSearch;
int l = 0;
int r = array.length - 1;
int i = 0;
Stelle = split(array, v, l, r);
while(array[Stelle] != v){
Stelle = split(array, v, l, r);
l = Stelle + 1;
i++;
if(i>1000){
break;
}
}
}
if(array.length == 0){
Stelle = -1;
}
return Stelle;
}
public static void main(String[] args){
int v = Integer.parseInt(args[0]);
int[] array = new int[args.length -1];
for(int i = 0; i<array.length; i++){
array[i] = Integer.parseInt(args[i+1]);
}
System.out.println(search(array, v));
}
我的问题的解决方法是我定义x的方式。对于足够大的值,我将使用x=0,因为x是int,因为(v-array[l])/(array[r]-array[l])的结果通常小于1,我的方法将其解释为0。所以我所要做的就是在部门前面写上(r-l),然后它就成功了。我想我的程序之所以能正常运行,是因为纯粹的运气。lol:D你没有向我们展示测试代码。欢迎来到StackOverflow!我无法从你的问题中看出你的测试代码是什么样子的?为了让我们提供帮助,请包括再现错误所需的完整代码。我现在包括测试代码什么类型的
程序
?什么类型的分割法?我仍然认为您没有向我们展示足够的代码来解决这个问题。您仍然没有提供返回选项的代码,即程序。execute
方法。但是测试的要点似乎是断言split(SEARCH\u ARRAY,7,0,8)
返回1,测试失败,因为它返回0。看起来你想写一个二进制搜索,对吗?
void testSplit() {
private static final int[] SEARCH_ARRAY = new int[]{2, 4, 7, 9, 12, 21, 26, 31, 37};
var result1 = Program.execute(() -> SPLIT_METHOD.invoke(null, SEARCH_ARRAY, 7, 0, 8));
var result2 = Program.execute(() -> SPLIT_METHOD.invoke(null, SEARCH_ARRAY, 21, 4, 8));
var result3 = Program.execute(() -> SPLIT_METHOD.invoke(null, SEARCH_ARRAY, 21, 0, 8));
assertThat(result1.getReturnValue()).contains(1);
assertThat(result2.getReturnValue()).contains(5);
assertThat(result3.getReturnValue()).contains(4);
}