Обработка пользовательских ошибок с наборами
Я почти закончил работу с этим кодом, и он работает почти правильно, за исключением того факта, что мне нужно, чтобы пользователь вводил числа в границах вселенной. Я убедился, что пользователь не может ввести ничего, кроме целого числа. Но я не уверен, как сделать так, чтобы число было 1-10 (набор юниверсов). Может кто-нибудь дать мне руководство?
Вот мой код:
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);
}
}
1 ответ
Решение
Что-то вроде
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;
}
}
}