增强了字符串的for循环

时间:2018-12-24 09:52:11

标签: java arrays for-loop

我是编码的初学者。目前,我正在学习数组。

在下面的代码中,我试图显示用户使用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而不是单词。

3 个答案:

答案 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);