簡體   English   中英

Arrays.binarySearch的行為

[英]Behaviours of Arrays.binarySearch

我的意圖是在遍歷excel文件時跳過一些預定義的行,如下所示:

int rowIndex = 0;
int[] rowsToBeSkipped = new int[]{1,2,15,16,17,18,31,32,33,34};

while (rowIterator.hasNext()) 
{
    Row row = rowIterator.next();
    if(Arrays.binarySearch(rowsToBeSkipped, rowIndex) == -1){
        System.out.println("true "+rowIndex);
    }else{
        System.out.println("false "+rowIndex);
    }
        rowIndex++;
    }
}

結果如下:

true 0
false 1
false 2
false 3
false 4
false 5
false 6
false 7
false 8
false 9
false 10
false 11
false 12
false 13
false 14
false 15
false 16
false 17
false 18
false 19
false 20
false 21
false 22
false 23
false 24
false 25
false 26
false 27
false 28
false 29
false 30
false 31
false 32
false 33
false 34
false 35
false 36
false 37
false 38
false 39
false 40
false 41

誰能解釋為什么只有0可以匹配條件?

您正在濫用此方法。 引用其文檔(重點是我的):

返回:搜索鍵的索引(如果它包含在數組中);否則為false。 否則為(-(插入點)-1)。 插入點定義為將鍵插入數組的點

這意味着當且僅當您嘗試搜索的值將插入數組的開頭時,此方法才返回-1-在此情況下為0。

您應該測試任何嚴格小於0的值,而不僅僅是-1:

if (Arrays.binarySearch(rowsToBeSkipped, rowIndex) < 0) {
    // etc

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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