2017-05-31 38 views
0
for(int i=0;i<dictionary.words.length;i++){ 
    if(dictionary.words[i].length() <=maxWordlength){ 
     count++; 
     smallWordDictionary[i]=dictionary.words[i]; 
    } 
} 

我使用此代碼將字典數組中的字符串存儲到包含字符串較短的字符串的數組中。我現在想要這個陣列旁邊的隨機數通過下面的方法(創建一個隨機生成的字):訪問數組java

randomWord(smallWordDictionary, outcome); 

當我使用下面的方法:

static void randomWord(String [] array, int number){ 
    System.out.println(array[number]); 
} 

控制檯打印出null,我不知道爲什麼。如何讓控制檯打印出與smallWordDictionary陣列中的元素相對應的字符串?

+0

控制檯時不聰明,如果是打印空,那是因爲這數組中的元素包含空值。我們需要完整的代碼來理解你的邏輯。 –

+3

請閱讀[mcve]並改善您的問題。 – GhostCat

+0

我同意@GhostCat,我們需要足夠的代碼才能重現此內容並查看完整圖片。如果只能看到排水管的頂部並且無法打開櫃門,很難看到管子在哪裏泄漏。 – Cody

回答

2

當長度大於maxWordlength時,您不會在smallWordDictionary[i]中存儲任何東西。

數組成員的默認值是null,不是空字符串。 (引用類型的任何陣列成員的默認值爲null)。

因此,您的一些隨機索引將指向仍然爲null的數組成員。

解決方案包括:

  • 生成一個較小的陣列,僅包括該傳遞詞語的不會出現空位。
  • 在每個未通過的成員中放置空字符串。
  • 打印時檢查爲空。

建立一個更小的陣列

做,這是一個列表的最簡單方法。

List<String> smallWordList = new ArrayList<>; 

for(int i=0;i<dictionary.words.length;i++){ 
    if(dictionary.words[i].length() <=maxWordlength){ 
     count++; 
     smallWordList.add(dictionary.words[i]); 
    } 
} 

smallWordDictionary = smallWordList.toArray(new String[]); 

注意count是薩姆斯作爲smallerWords.size()smallerWordDictionary.length。在各成員國

將空字符串沒有通過

for(int i=0;i<dictionary.words.length;i++){ 
    if(dictionary.words[i].length() <=maxWordlength){ 
     count++; 
     smallWordDictionary[i]=dictionary.words[i]; 
    } 
    else { 
     smallWordDictionary[i]=""; 
    } 
} 

檢查空打印

static void randomWord(String [] array, int number){ 
    String member = array[number]; 
    System.out.println((null == member) ? "" : member); 
} 
+0

我打算這樣,因爲我只想要6個字符或更少的單詞。 – Naf

+0

你問你爲什麼看到「null」打印出來。這就是爲什麼。讓我添加一些代碼來說明如何避免它。 –

+0

我該怎麼做? – Naf