2012-09-04 49 views
2

這可能是一個微不足道的問題,但我遇到這種語法來爲一個數組聲明:與表達的Java數組聲明

void someFunction(int n){ 
     int[] myArray = new int[ n == 0 ? 1 : n ]; 
     ... 
    } 

我試着在網上找了一些教程來了解什麼是沒有運氣發生。
任何人都可以解釋在右括號中的表達式,什麼時候是通常使用的東西?

+1

'n == 0?1:n'基本上是一個壓縮的if語句,如果條件爲真,它是第一個元素,如果它不是那麼它是第二個元素。在這種情況下,變量似乎是數組大小,並且代碼確保數組永遠不會大小爲零。 –

回答

5

合適的表情是「快捷方式」到「IF /(然後)/否則」

表達式的第一部分是「如果」,條件,並且可以(但不必be)包括在括號中,以便說明。

然後來了?,陳述'條件結束,結果是什麼?' 之後,出現'true'聲明,並在冒號後添加'else'聲明。

簡而言之,這意味着:如果n == 0,則分配一個大小爲1的數組,否則分配n個元素。

這是一種相當常見的c語法,也是一種縮短變量賦值的好方法,但實際上並不涉及每個定義的數組。

+0

哦,好的。所以基本上它什麼也不做,只是聲明基於n的值的大小的數組。得到它了。謝謝! – rgamber

+0

是的,這是正確的。並歡迎您:) – ATaylor

1

這是一個三元運算符。評估?之前的布爾語句,如果爲true,則表達式評估爲:之前的值,否則評估爲第二個值。

1

這裏是陣列的長度爲5的簡單的聲明:

int[] myArray = new int[5]; 

n == 0 ? 1 : n提供了許多(如果1n == 0如果n不),它是ternary operator一個例子。

所以

int[] myArray = new int[ n == 0 ? 1 : n ]; 

是速記

int[] myArray; 

if (n == 0) { 
    myArray = new int[1]; 
} else { 
    myArray = new int[n]; 
} 
+0

您的解釋是正確的,但是您的'速記'代碼會導致問題,因爲int [] myArray在創建後就會超出範圍。 – ATaylor

+0

是的,這會起作用。 :) – ATaylor

1

它是用java三元運算符(?)用於檢查是否n爲0,如果n是零,創建尺寸1的陣列。

如果n> 1,則用它來創建數組。零長度數組在Java中是合法的,所以不知道作者的意思在這裏。

如果從壞的價值爲維護中應該已經檢查n > 0 ? n :1,所以即使負值獲得大小的陣列1

1

由於@ATaylor和@SperanskyDanil說,
語法將創建數組大小1,當n=0,它會創建大小爲n的數組,當時n != 0
如下圖所示。
enter image description here