Non duplicates numbers in user input

前端 未结 5 471
野性不改
野性不改 2021-01-24 02:59

I am trying to work out how to create an input validation where it won\'t let you enter the same number twice as well as being inside a range of numbers and that nothing can be

5条回答
  •  故里飘歌
    2021-01-24 03:11

    I would rewrite the method recursively to avoid multiple loops.

    If you are not familiar with recursively methods it is basically a method that calls itself inside the method. By using clever parameters you can use a recursively method as a loop. For example

    void loop(int index) {
    
       if(index == 10) {
           return;   //End loop
       } 
       System.out.println(index);
       loop(index++);
    }
    

    by calling loop(1) the numbers 1 to 9 will be printed.

    In your case the recursively method could look something like

    public void choose(int nbrOfchoices, List taken) {
          if(nbrOfChoices < 0) {
              return; //Terminate the recursively loop
          }
    
          System.out.println("Enter enter a number between 1 and 59");
    
          try {      
              int temp = keyboard.nextInt(); //Scanner.nextInt throws InputMismatchException if the next token does not matches the Integer regular expression
          } catch(InputMismatchException e) {
              System.out.println("You need to enter an integer");
              choose(nbrOfChoices, taken);
              return;
          }
          if (value < 1 || value >= 59) { //Number not in interval
                System.out.println("The number " + temp + " is not between 1 and 59.");
                choose(nbrOfChoices, taken);
                return;
            }
    
            if (taken.contains(temp)) { //Number already taken
                System.out.println("The number " + temp + " has already been entered.");
                choose(nbrOfChoices, taken);
                return;
            }
            taken.add(temp);
            choose(nbrOfChoices--, taken);
    }
    

    Now you start the recursively method by calling choose(yourNumberOfchoices, yourArrayList taken). You can also easily add two additonal parameters if you want to be able to change your number interval.

提交回复
热议问题