【问题标题】:Exit do-while loop application退出 do-while 循环应用程序
【发布时间】:2019-03-05 15:17:05
【问题描述】:

我的控制台应用程序有点问题。应用程序应该从用户那里获取数字并将它们添加到列表中,但如果输入是“c”,它应该关闭。我不知道如何在不使用Scanner.nextLine() 挂起应用程序并退出循环的情况下验证“c”变量。

public void getNumbersFromUser() {

  Scanner scanner = new Scanner(System.in);
  int number;
  boolean flag = true;

  do{
     System.out.println("Enter a number");

     while(!scanner.hasNextInt()) {
        System.out.println("Thats not a number !");
        scanner.next();
     }
        number = scanner.nextInt();
        list.add(number);
        System.out.println(list);

  }
  while(flag);

【问题讨论】:

  • 您已经使用了scanner.next(),那么为什么不检查它不是“c”呢?如果你不喜欢“那不是数字!”打印“c”输入,那么你不能先检查数字。读取为 String,然后在适当的时候转换为 int。

标签: java loops console-application do-while


【解决方案1】:

一种方法是使用Scanner.next(),它会阻止等待输入,然后自己用Integer.parseInt()检查输入:

List<Integer> list = new ArrayList<>();
Scanner scanner = new Scanner(System.in);

do {
    System.out.println("Enter a number");
    String next = scanner.next();
    if (next.equals("c")) {
        break;
    }

    try {
        int number = Integer.parseInt(next);
        list.add(number);
        System.out.println(list);
    } catch (NumberFormatException ex) {
        System.out.println("That's not a number !");
    }
} while (true);

【讨论】:

    【解决方案2】:

    最好使用next() 获取输入,并且不添加第三方库,创建一个辅助方法来检查输入是否为数字:

    辅助方法

    public static boolean isNumeric(String strNum) {
        try {
            int d = Integer.parseInt(strNum);
        } catch (NumberFormatException | NullPointerException nfe) {
            return false;
        }
        return true;
    }
    

    在 do/while 循环中使用它

    Scanner scanner = new Scanner(System.in);
    List<Integer> list = new ArrayList<>();
    boolean flag = true;
    
    do {
        System.out.println("Enter a number");
        String input = scanner.next();
    
        if(!isNumeric(input)) {
            if(!input.equals("c")) {
                System.out.println("Thats not a number !");
                continue; // will restart the loop
            }
            else break; // will exit if input is "c"
        }
        else {
            list.add(Integer.parseInt(input));
            System.out.println(list);
        }
    }
    while(flag);
    

    现场示例here

    【讨论】: