Java程序求助:输入单词列表后数组空元素被输出问题
解决你的Java单词列表打印问题
嘿,我来帮你搞定这个问题!你遇到的情况很常见——因为你用了固定长度的数组,但实际输入的单词数量远小于数组的长度(20),那些没被赋值的数组位置默认是null,所以最后循环打印整个数组时,这些null就被显示出来了。而且还要注意,你输入的quit也被存进数组里了,其实我们也不需要打印它对吧?
方案一:修改循环范围(基于你原有的数组代码)
你只需要调整最后打印时的循环条件,只遍历到真正有有效单词的位置就行。看代码里的i变量,它记录的是下一个要存储单词的索引——也就是说,用户输入的有效单词都存在str[0]到str[i-1]里(因为输入quit时,我们把quit存在了str[i]然后直接break,并没有递增i)。所以把打印的循环改成这样:
for (int j=0;j<i;j++) { System.out.println(str[j]); }
这样就只会打印用户输入的有效单词,不会出现null和quit了。
方案二:用动态集合ArrayList(更推荐新手使用)
固定长度的数组灵活性很差,Java里有更适合这种动态添加元素场景的工具——ArrayList,它可以自动扩容,完全不用担心多余的空位置。我帮你改写了代码,还优化了quit的判断逻辑:
import java.util.Scanner; import java.util.ArrayList; class ques1 { public static void main(String[] args) { // 用ArrayList代替固定长度数组 ArrayList<String> words = new ArrayList<>(); Scanner sc = new Scanner(System.in); System.out.println("enter series of words and to exit write quit"); while(true){ String input = sc.nextLine(); // 用equalsIgnoreCase同时匹配quit和QUIT,更简洁 if(input.equalsIgnoreCase("quit")) break; // 把有效单词添加到集合里 words.add(input); } System.out.println(); System.out.println("----------------------------"); // 用增强for循环遍历集合,直接打印每个单词 for (String word : words) { System.out.println(word); } } }
这个版本不仅解决了空位置的问题,代码也更简洁易读,以后遇到需要动态添加元素的场景,都可以优先考虑用ArrayList哦!
内容的提问来源于stack exchange,提问作者Shalini Bose
相关产品推荐
相关产品推荐

