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

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

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

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

  1. import java.util.ArrayList;
  2. import java.util.List;
  3. import java.util.Scanner;
  4. public class App {
  5. public static void main(String[] args) throws Exception {
  6. Scanner scanner = new Scanner(System.in);
  7. List<String> wordsList = new ArrayList<String>();
  8. while (scanner.hasNextLine())
  9. wordsList.add(scanner.nextLine()); // Keeps asking user for inputs (never ending loop)
  10. scanner.close();
  11. for (String word : wordsList)
  12. System.out.println(word);
  13. }
  14. }

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

umuewwlo

umuewwlo1#

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

备选案文1:

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

  1. import java.util.Scanner;
  2. public class App {
  3. public static void main(String[] args) throws Exception {
  4. Scanner scanner = new Scanner(System.in);
  5. System.out.print("Enter number of entries: ");
  6. String[] wordsArray = new String[scanner.nextInt()];
  7. scanner.nextLine(); //Skip the end of the line which contains the user's number of entries.
  8. for (int i = 0; i < wordsArray.length; ++i) {
  9. System.out.print("Entry " + (i + 1) + ": ");
  10. wordsArray[i] = scanner.nextLine();
  11. }
  12. for (String word : wordsArray)
  13. System.out.println(word);
  14. }
  15. }

备选案文2:

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

  1. import java.util.ArrayList;
  2. import java.util.Scanner;
  3. public class App {
  4. public static void main(String[] args) throws Exception {
  5. Scanner scanner = new Scanner(System.in);
  6. ArrayList<String> wordsList = new ArrayList<>();
  7. do {
  8. System.out.print("Entry " + (wordsList.size() + 1) + ": ");
  9. wordsList.add(scanner.nextLine());
  10. System.out.print("Enter an empty/blank line to insert another word, or anything else to stop and exit: ");
  11. }
  12. while (scanner.nextLine().trim().equals(""));
  13. for (String word : wordsList)
  14. System.out.println(word);
  15. }
  16. }

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

展开查看全部

相关问题