簡體   English   中英

方法返回 int 的“Optional[0]”瞬間

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM