我是编码的初学者。目前,我正在学习数组。
在下面的代码中,我试图显示用户使用String
数组输入的单词。使用增强的for循环时,代码显示null
。谁能解释这个问题?
该代码在正常的for循环中运行良好。
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String word;
int count = 0;
String[] words = new String[100];
System.out.println("Enter the words (enter 'done' when finished):");
do {
System.out.println("Enter word "+ (count+1));
word=scanner.nextLine();
if (!word.equalsIgnoreCase("done")) {
words[count]=word;
count++;
}
}while (!word.equalsIgnoreCase("done"));
System.out.println("Words entered are:");
for (String print:words){
System.out.println(print);
}
scanner.close();
}
该代码应显示用户输入的单词,但显示的是null
而不是单词。
答案 0 :(得分:2)
您已经制作了一个包含100个条目的数组。最初,它们全部为100。然后,您的do / while循环将填充其中的一些内容。当然,有多少取决于用户。
但是,您要打印阵列的所有100个条目。您会看到一些单词,然后有很多空值。最好像这样打印不为空的条目。
for (String print:words){
if (print != null) {
System.out.println(print);
}
}
答案 1 :(得分:2)
增强的for循环不适用于这种情况,因为它正在打印数组的所有100个元素,其中大多数可能是null
。
使用常规的for循环时,您可以利用count
变量,该变量仅可打印数组的初始化元素:
for (int i = 0; i < count; i++) {
System.out.println(words[i]);
}
如果您坚持使用增强的for循环,则可以检查null
元素,并在遇到第一个元素时退出循环:
for (String print:words){
if (print != null) {
System.out.println(print);
} else {
break; // once you encountered the first null, there's no point to continue the loop
}
}
答案 2 :(得分:1)
如果您仔细观察,它会打印用户输入的单词。您看到null
是因为数组的大小为100。
String[] words = new String[100];
在控制台中向上滚动以查看用户最初输入的名称。您会看到 nulls ,因为数组中的其余元素为null
。例如:如果用户输入 5个单词,则数组中其余的 95个单词为null
。
您可以添加一个空检查以仅打印非空值。
for (String print : words) {
if (print != null) {
System.out.println(print);
}
}
如果您使用的是java-8
,则可以:
Arrays.stream(words).filter(Objects::nonNull).forEach(System.out::println);