2014-02-14 26 views
0

我發現很有趣但很奇怪的字符串和數組混合(語法)。請參見下面的代碼:字符串和數組混合語法和一個非常罕見的用法

實施例A:

int x = (int)(Math.random()*4); 
String n = new String[] {"FF", "RR"}[x]; 

System.out.println(n) ; 

當隨機數爲0或1我的問題,它輸出「FF」或「RR」是如何可能發生。我無法理解例A.使用的語法我用剛剛如下非常正常的String數組語法:

String s[] ; 
s = new String[]{"dd", "rr"}; 

或者

String s [] = {"gg", "ss"}; 

但我還沒有看到頂部的語法(例A)。有人可以幫助我理解頂級語法是如何處理和執行的嗎?提前謝謝。

+0

'Random.nextInt(INT N)'通常被認爲是產生一個隨機整數(好吧,至少一個更好的辦法我認爲這樣)。 – Dukeling

回答

4
String n = new String[] {"FF", "RR"}[x]; 
      ^^^^^^^^^^^^^^^^^^^^^^^^^ 

這創建包含兩個元素,"FF""RR"一個匿名數組。匿名數組是一個沒有名字的臨時對象,只要語句執行完畢就會被銷燬。然後使用[]運算符對匿名數組進行索引。

String n = new String[] {"FF", "RR"}[x]; 
            ^^^ 

這將返回匿名數組的第x個元素。

請注意,這個程序似乎有一個錯誤;如果隨機數導致x大於1,則會得到ArrayIndexOutOfBoundsException

+1

在你最後的陳述中詳細說明,'x'可以取[0,3]中的任何值,2和3都會產生一個異常。 – Dukeling

+0

容易和很好的解釋。我同意,如果隨機數大於1,它會拋出「ArrayIndexOutofBoundException」。 – MKod

0

它與您的第二個符號基本相同。

第二行是相當於

String s[]= new String[]{"FF","RR"}; 
String n = s[x]; 

這只是s是在這種情況下是匿名的。

0

這是這樣的:當你正常訪問字符串數組中的元素時,你會怎麼做?

String s = arr[0]; 

獲取數組中的第一個元素。現在你是這樣做的:

String n = new String[] {"FF", "RR"}[x]; 

你只是在創建時立即從數組中獲取元素。或者,xth元素。請注意,如果隨機數超出數組邊界,程序將失敗。

1

new String[] {"FF", "RR"}是「字符串數組」類型的表達式。這就是爲什麼你可以在

String[] s = new String[] {"FF", "RR"}; 

因爲它是類型的「字符串數組」將其分配給s,您可以使用它的[]運營商給定的索引處得到的字符串。你必須在括號內放置一個int。並且xint

所以new String[] {"FF", "RR"}[x]是數組new String[] {"FF", "RR"}的索引x上的元素。該元素是String類型的。因此,您可以將其分配給變量n,該變量也被聲明爲字符串。

這基本上是同樣的事情做

char c = "hello".charAt(2); 

int i = new Person().getName().substring(2).indexOf('o'); 
+0

謝謝......明白了。 – MKod

相關問題