退出同时执行循环应用

时间:2019-03-05 15:17:05

标签: java loops console-application do-while

我的控制台应用程序有一个小问题。应用程序应从用户那里获取数字并将其添加到列表中,但是如果输入为“ 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);

2 个答案:

答案 0 :(得分:2)

一种实现方法是使用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);

答案 1 :(得分:1)

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

Helper方法

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