Question

I'm pretty much done with this code and it runs almost correctly other than the fact that I need the user to enter numbers within the boundaries of the universe. I've made sure the user can't enter anything but an integer. But I'm not sure how to go about making sure the number is 1-10 (the universe set). Can someone give me some guidance?

Here is my code:

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);
}
}
Was it helpful?

Solution

Something like

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);

Edit: Considering the above, I would harden the solution more like the following

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;
        }
    }
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top