java.util.scanner—使用scanner.hasnext()和scanner参数system.in时,java中无限循环的替代方法

zujrkrfu  于 2021-08-25  发布在  Java
关注(0)|答案(1)|浏览(542)

使用system.in和scanner.hasnext()的无限循环

当从用户获取输入并将其存储在列表中时,新手(像我一样)通常会考虑使用scanner类进行输入,并使用hasnext()方法检查用户的下一个输入,如下所示。但是经常忘记的是,程序会不断地要求用户提供输入,永远不会停止。当用户每次按enter键时,hasnext()方法都会认为生成了另一个输入,并继续循环(请记住,多次按enter键不会有什么不同)。

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class App {
    public static void main(String[] args) throws Exception {

        Scanner scanner = new Scanner(System.in);

        List<String> wordsList = new ArrayList<String>();

        while (scanner.hasNextLine())
            wordsList.add(scanner.nextLine()); // Keeps asking user for inputs (never ending loop)

        scanner.close();

        for (String word : wordsList)
            System.out.println(word);
    }
}

奎。上述过程的工作备选方案是什么?这些方案允许用户动态地决定输入的数量,而不提及任何地方的总输入。

umuewwlo

umuewwlo1#

因为您要求用户可以输入任何有效的 String 作为输入,您可以:

备选案文1:

用户可以在给出条目之前输入要给出的条目数。因此,您只需要循环请求的次数。例如:

import java.util.Scanner;

public class App {
    public static void main(String[] args) throws Exception {

        Scanner scanner = new Scanner(System.in);

        System.out.print("Enter number of entries: ");
        String[] wordsArray = new String[scanner.nextInt()];
        scanner.nextLine(); //Skip the end of the line which contains the user's number of entries.

        for (int i = 0; i < wordsArray.length; ++i) {
            System.out.print("Entry " + (i + 1) + ": ");
            wordsArray[i] = scanner.nextLine();
        }

        for (String word : wordsArray)
            System.out.println(word);
    }
}

备选案文2:

如果即使用户也不知道他们需要多少条,那么您可以在每次输入后询问他们,如下所示:

import java.util.ArrayList;
import java.util.Scanner;

public class App {
    public static void main(String[] args) throws Exception {

        Scanner scanner = new Scanner(System.in);

        ArrayList<String> wordsList = new ArrayList<>();

        do {
            System.out.print("Entry " + (wordsList.size() + 1) + ": ");
            wordsList.add(scanner.nextLine());
            System.out.print("Enter an empty/blank line to insert another word, or anything else to stop and exit: ");
        }
        while (scanner.nextLine().trim().equals(""));

        for (String word : wordsList)
            System.out.println(word);
    }
}

我知道,如果用户想退出或不想退出,每次输入这个(第二个)选项可能会有点无聊,但要退出程序(从第二个选项),他们必须做的唯一一件事就是键入任何会产生非空行/空行的内容。他们只需点击一个回车键即可继续输入。

相关问题