簡體   English   中英

用於確定數組是否為一維的函數

[英]Function to determine if an array is one-dimensional

在Java中,如何編寫類似於以下的函數,以確定數組是否是一維的? (由於array[i].length部分,編譯器拒絕編譯它,因為array尚未聲明為嵌套數組。)

boolean isOneDimensional(Object[] array)
{
    for (int i=0; i<array.length; i++)
        if (array[i].length>1) return false;
    return true;
}

您通過getClass獲取條目的Class ,並通過isArray詢問該類是否為數組類型:

 boolean isOneDimensional(Object[] array) { // Assuming you want an NPE if `array` is `null`, so not checking for (int i=0; i<array.length; i++) if (array[i] != null && array[i].getClass().isArray()) return false; return true; } 

請注意null檢查,以防萬一。

不,我的壞,以上給出了錯誤的結果:

isOneDimensional(new String[2][])

基本上,有兩種我們可以處理的事情:一個真正用Object[]創建的Object[] ,因此可以是一維或多維的,具體取決於它的內容,或者用其他東西創建的對象。 Object[] ,比如我上面的new String[2][]

我們可以使用上面的循環版本檢測第一個案例; 但首先,我們使用array.getClass().getComponentType().getComponentType()檢查第二種情況array.getClass().getComponentType().getComponentType()

boolean isOneDimensional(Object[] array) {
    // Assuming you want an NPE if `array` is `null`, so not checking
    if (array.getClass().getComponentType().getComponentType() != null) {
        return false;
    }
    for (int i=0; i<array.length; i++) {
        if (array[i] != null && array[i].getClass().isArray()) {
            return false;
        }
    }
    return true;
}

我們知道第一個getComponentType將返回非null因為我們正在查看與Object[]分配兼容的東西,所以它肯定有一個組件類型。 所以我們檢查類型的組件類型,如果它已知是一個數組類型,我們根本不需要循環。

String[]   o1 = new String[2];      // Yes, it's one-dimensional
String[][] o2 = new String[2][];    // No, it isn't
Object[]   o3 = new Object[2];      // It may or may not be, depending on contents
Object[]   o4 = new Object[2];      // It may or may not be, depending on contents

// This makes `o3` multi-dimensional
o3[0] = new Object[0];
System.out.println(isOneDimensional(o1));   // true
System.out.println(isOneDimensional(o2));   // false
System.out.println(isOneDimensional(o3));   // false
System.out.println(isOneDimensional(o4));   // true

暫無
暫無

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

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