1

With this Lottery program I am trying to make sure the number are within a range of 1-59, The same number cannot be entered twice and that only numbers can be entered. The only bit of code I need help on is on the only numbers can be entered part.


public void choose() {
        System.out.println("\n");
        int temp;
        boolean valid;

        for (int i = 0; i < 6; i++) {
            do {
                valid = true;
                System.out.print("Enter in an integer from 1 to 59: ");
                temp = keyboard.nextInt();
                if (temp < 1 || temp > 59) {
                    System.out.println("Error, please enter a valid integer !!");
                    valid = false;
                }
                for (int j = 0; j < i; j++) {
                    if (numbers[j] == temp) {
                        System.out.println("Please enter a different number as you have already entered this !!");
                        valid = false;
                        break;
                    }
                }
                numbers[i] = temp;
            } while (!valid); 
        }
    }
sarah
  • 39
  • 4
  • For storing the numbers entered, you might want to use a Set (https://docs.oracle.com/javase/7/docs/api/java/util/Set.html). Then, you can use contains() to check if a number has already been entered instead of looping explicitly through the list if entered numbers. – dasmy Mar 07 '20 at 14:08
  • 1
    didn't i answer it yesterday – Abhinav Chauhan Mar 07 '20 at 14:11
  • see my answer, can someone make it even shorter – Abhinav Chauhan Mar 07 '20 at 15:38

3 Answers3

1

Do it as follows:

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    static int[] numbers = new int[6];
    static Scanner keyboard = new Scanner(System.in);

    public static void main(String args[]) {
        // Test
        choose();
        System.out.println(Arrays.toString(numbers));
    }

    static void choose() {
        int temp = 0;
        boolean valid;
        for (int i = 0; i < 6; i++) {
            // Check if the integer is in the range of 1 to 59
            do {
                valid = true;
                System.out.print("Enter in an integer (from 1 to 59): ");
                try {
                    temp = Integer.parseInt(keyboard.nextLine());
                    if (temp < 1 || temp > 59) {
                        System.out.println("Error: Invalid integer.");
                        valid = false;
                    }
                } catch (NumberFormatException e) {
                    System.out.println("Error: The input is not an integer.");
                    valid = false;
                }
                for (int j = 0; j < i; j++) {
                    if (numbers[j] == temp) {
                        System.out.println("Please enter a different number as you have already entered this");
                        valid = false;
                        break;
                    }
                }
                numbers[i] = temp;
            } while (!valid); // Loop back if the integer is not in the range of 1 to 100
        }
    }
}

A sample run:

Enter in an integer (from 1 to 59): a
Error: The input is not an integer.
Enter in an integer (from 1 to 59): 12.23
Error: The input is not an integer.
Enter in an integer (from 1 to 59): 10
Enter in an integer (from 1 to 59): 200
Error: Invalid integer.
Enter in an integer (from 1 to 59): 20
Enter in an integer (from 1 to 59): 5
Enter in an integer (from 1 to 59): 10
Please enter a different number as you have already entered this
Enter in an integer (from 1 to 59): 20
Please enter a different number as you have already entered this
Enter in an integer (from 1 to 59): 6
Enter in an integer (from 1 to 59): 7
Enter in an integer (from 1 to 59): 12
[10, 20, 5, 6, 7, 12]
Arvind Kumar Avinash
  • 50,121
  • 5
  • 26
  • 72
1

Try:

System.out.println("\n");
int temp;
boolean valid;

for (int i = 0; i < 6; i++) {
    do {
        valid = true;
        System.out.print("Enter in an integer from 1 to 59: ");
        while (!keyboard.hasNextInt()) {
            keyboard.next();
            System.out.println("Error.! Please enter a number");
            System.out.print("Enter in an integer from 1 to 59: ");
        }
        temp = keyboard.nextInt();
        if (temp < 1 || temp > 59) {
            System.out.println("Error, please enter a valid integer !!");
            valid = false;
        }
        for (int j = 0; j < i; j++) {
            if (numbers[j] == temp) {
                System.out.println("Please enter a different number as you have already entered this !!");
                valid = false;
                break;
            }
        }
        numbers[i] = temp;
    } while (!valid);
}

You can check if user had entered an int or not with the method keyboard.hasNextInt().

Wai Ha Lee
  • 7,664
  • 52
  • 54
  • 80
Subramanian Mariappan
  • 2,963
  • 1
  • 8
  • 21
  • do you want all of those 6 numbers back, to use somewhere – Abhinav Chauhan Mar 07 '20 at 14:21
  • While it will work for this particular situation, you should strive to use `nextLine` instead of `next`, `nextInt` etc. Check https://stackoverflow.com/questions/13102045/scanner-is-skipping-nextline-after-using-next-or-nextfoo – Arvind Kumar Avinash Mar 07 '20 at 14:22
-1

This May be the Most Efficient but complex.

Ask me if you need some explaination

public class Test {


public static void main(String[] args) {
    
    Scanner scanner = new Scanner(System.in);
    ArrayList<String> numbers = new ArrayList<>(6);
    String s ;
    do {
        System.out.println("Enter a number between 1 and 59");
        s = scanner.nextLine().toString();
    }
    while(!s.matches("[0-9]|[1-5][0-9]") || numbers.contains(s) || numbers.size() < 5 && numbers.add(s));
    }
}

also tell me if you want prompts for invalid range/format and duplicate entries i shall figure out a way

Abhinav Chauhan
  • 985
  • 1
  • 4
  • 20