[英]Method returns “Optional[0]” instant of an int
你好,一個很簡單的問題:我應該寫一個方法 split(int[] array, int toSearch, int lower, int upper) 使用 interpolate 方法來找出在哪里拆分數組。 它應該返回索引 x 在哪里拆分。 我的代碼如下所示:
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));
}
公式是正確的,並且我使用方法 split 的代碼的 rest 也可以工作(這很奇怪),但是方法 split 本身的測試不起作用。 我收到錯誤消息:“期望 <Optional[0]> 包含 <1> 但沒有” 那么什么是 Optional[0]? 如果拆分方法不正確,為什么代碼的 rest 工作正常? 提前致謝!
有人問過測試代碼,所以這里是:
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);
}
我的問題的解決方案是我定義 x 的方式。 對於足夠大的值,我會有 x = 0 因為 x 是 int 因為 (v-array[l])/(array[r]-array[l]) 的結果通常小於 1,我的方法將其解釋為 0 . 所以我所要做的就是在除法前面寫下(rl),它就成功了。 我認為我的程序仍然有效的原因是純粹的運氣哈哈:D
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.