java - 使用集处理用户错误

标签 java input error-handling set robustness

我已经用这段代码完成了很多工作,除了我需要用户在宇宙边界内输入数字之外,它几乎可以正确运行。我确保用户只能输入整数。但是我不确定如何确保数字为1-10(已设置Universe)。有人可以给我一些指导吗?
这是我的代码:

import java.util.*;
public class sets {
  public static void main (String[] args) {
  Scanner in = new Scanner(System.in);

  //declare the universe in a set
  Set universe = new HashSet();
  for (int i = 1; i <= 10; i++) {
    universe.add(i);
  }

  //Ask the user how many elements and declare set A
  System.out.print("How many elements in Set A? ");
  int elementsA = in.nextInt();
  Set A = new HashSet();

 for (int j = 1; j <= elementsA; j++) {
   System.out.print("Enter a number 1-10: ");
   while (!in.hasNextInt()) {
     in.next();
     System.out.println("Input must be a number.");
     System.out.print("Enter a number 1-10: "); 
   }
   int numA = in.nextInt();
   A.add(numA);
 }

 //Ask the user how many elements and declare set B
 System.out.print("How many elements in Set B? ");
 int elementsB = in.nextInt();
 Set B = new HashSet();

 for (int k = 1; k <= elementsB; k++) {
  System.out.print("Enter a number 1-10: ");
  while (!in.hasNextInt()) {
   in.next();
   System.out.println("Input must be a number.");
   System.out.print("Enter a number 1-10: "); 
  }
  int numB = in.nextInt();
  B.add(numB);
}

//get the union of the sets
Set union = new HashSet(A);
union.addAll(B);
System.out.println("The union of A and B: "+union);

//get the intersection of the sets
Set intersect = new HashSet(A);
intersect.retainAll(B);
System.out.println("The intersection of A and B: "+intersect);
}
}

最佳答案

就像是

while (!in.hasNextInt()) {
  in.next();
  System.out.println("Input must be a number.");
}

int numA = in.nextInt();

while (numA < 0 || numA > 10) {
  System.out.print("Enter a number 1-10: "); 
  numA = in.nextInt(); 
}

A.add(numA);

编辑:考虑到上述情况,我将加强解决方案,如下所示
while (true) {
    if (!in.hasNextInt()) {
        System.out.println("Input must be a number.");
        in.next();
    } else {
        int num = in.nextInt();

        if (num < 0 || num > 10) {
            System.out.println("Input must be between 1 and 10 (inclusive).");
        } else {
            // add num to collection
            break;
        }
    }
}

关于java - 使用集处理用户错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21711620/

相关文章:

java - Ant 在 Eclipse 中没有按照我的预期工作

java - 将列表从 Servlet 传递到 JSP

jquery - 用jquery-ajaxq实现重试逻辑的最佳方法是什么?

Java 无法使用双冒号运算符找到正确的重载方法

java - 使用 asterisk manager api 接听来电

java - 大输入的运行时错误

java - 如何使用keyboard.next().charAt(0)将值存储到数组?在java中

javascript - 选择表单中的第 N 个输入元素

visual-studio-2008 - 如何捕获devenv异常

error-handling - SSIS 中的审计和错误处理