访问数组java

问题描述:

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

当长度大于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