如果用户输入特定的关键字,如何停止从扫描仪读取?

问题描述 投票:0回答:2

我需要能够在控制台中输入随机数的整数,然后在完成后输入特殊字符,例如Q。但是,我不确定如何验证输入是否为int。

该点是用户输入x数量的整数,该整数从客户端发送到服务器,服务器从一个简单的方程式返回结果。我计划一次发送一个,因为可以输入任意数量的整数。

我尝试了几种不同的方法。我尝试使用hasNextInt。我尝试了nextLine,然后将每个输入添加到ArrayList中,然后解析了输入。

List<String> list = new ArrayList<>();
String line;

while (!(line = scanner.nextLine()).equals("Q")) {
    list.add(line);
}

list.forEach(s -> os.write(parseInt(s)));

这是我最初拥有的另一个循环,可以很好地验证输入,但是我不确定完成后如何退出循环。

while (x < 4) {
    System.out.print("Enter a value: ");

    while (!scanner.hasNextInt()) {    
        System.out.print("Invalid input: Integer Required (Try again):");
    }

    os.write(scanner.nextInt());
    x++;
}

任何帮助将不胜感激。谢谢

java java.util.scanner
2个回答
1
投票

您在这里:

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

while (scanner.hasNext()) {
    String line = scanner.nextLine();

    if (line.equals("Q")) {
        scanner.close();
        break;
    }

    try {
        int val = Integer.parseInt(line);
        list.add(val);
    } catch (NumberFormatException e) {
        System.err.println("Please enter a number or Q to exit.");
    }
}

0
投票

执行以下操作:

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

public class Main {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        List<Integer> list = new ArrayList<Integer>();
        String input = "";
        while (true) {
            System.out.print("Enter an integer (Q to quit): ");
            input = in.nextLine();
            if (input.equalsIgnoreCase("Q")) {
                break;
            }
            if (!input.matches("\\d+")) {
                System.out.println("This is an invalid entry. Please try again");
            } else {
                list.add(Integer.parseInt(input));
            }
        }
        System.out.println(list);
    }
}

示例运行:

Enter an integer (Q to quit): a
This is an invalid entry. Please try again
Enter an integer (Q to quit): 10
Enter an integer (Q to quit): b
This is an invalid entry. Please try again
Enter an integer (Q to quit): 20
Enter an integer (Q to quit): 10.5
This is an invalid entry. Please try again
Enter an integer (Q to quit): 30
Enter an integer (Q to quit): q
[10, 20, 30]

注意:

  1. while(true)创建一个无限循环。
  2. [\\d+]仅允许数字,即仅允许整数。
  3. [break导致循环中断。

如有任何疑问/问题,请随时发表评论。

© www.soinside.com 2019 - 2024. All rights reserved.