Spaces:
Running
Running
| The following method definition is provided in the program: | |
| ArrayList<Integer> lotterynumbers(Random r) | |
| Write an implementation of the method that returns the lottery numbers in the list. | |
| There are seven numbers, ranging from [1, 39]. | |
| The same number cannot appear twice in the list. | |
| Example method call: | |
| public static void main(String[] args){ | |
| Random rnd = new Random(); | |
| System.out.println(lotterynumbers(r)); | |
| System.out.println(lotterynumbers(r)); | |
| } | |
| Example output: | |
| [37, 14, 32, 20, 28, 21, 25] | |
| [20, 6, 23, 30, 13, 11, 26] | |
| ================================== | |
| import java.util.Random; | |
| import java.util.ArrayList; | |
| import java.util.HashSet; | |
| public class Test{ | |
| public static void main(String[] args){ | |
| final Random r = new Random(); | |
| System.out.println("Testing..."); | |
| ArrayList<Integer> nrot1 = lotterynumbers(r); | |
| ArrayList<Integer> nrot2 = lotterynumbers(r); | |
| System.out.println("Numbers: " + nrot1); | |
| System.out.println(""); | |
| // check 7 numbers | |
| System.out.print("Seven numbers in the list: "); | |
| System.out.println(nrot1.size() == 7 ? "Ok" : "No"); | |
| // check 1-39 | |
| boolean limit = true; | |
| for (int nro : nrot1) { | |
| if (nro < 1 || nro > 39) limit = false; | |
| } | |
| System.out.print("Numbers between 1 and 39: "); | |
| System.out.println(limit ? "Ok" : "No"); | |
| // check unique | |
| HashSet<Integer> hs = new HashSet<>(nrot1); | |
| boolean same = hs.size() == 7; | |
| System.out.print("All numbers unique: "); | |
| System.out.println(same ? "Ok" : "No"); | |
| // check both lists are different in content | |
| boolean diff = !(nrot1.equals(nrot2)); | |
| System.out.print("Random numbers: "); | |
| System.out.println(diff ? "Ok" : "No"); | |
| } | |
| // RETURN a list of 7 integers | |
| public static ArrayList<Integer> lotterynumbers(Random r) { | |
| ArrayList<Integer> numbers = new ArrayList<>(); | |
| for (int i=0; i<7; i++) { | |
| // r.nextInt(39) => generates 0 to 38 | |
| // +1 => adjusts the range to '1 to 39' | |
| int nro = r.nextInt(39) + 1; | |
| // check if number is unique - then add to the list | |
| if (!numbers.contains(nro)) { | |
| numbers.add(nro); | |
| } | |
| else { | |
| // adjust idx 'i' back by 1 to generate a new number through the loop | |
| i--; | |
| } | |
| } | |
| return numbers; | |
| } | |
| } | |
| Testing... | |
| Numbers: [31, 4, 8, 3, 17, 32, 1] | |
| Seven numbers in the list: Ok | |
| Numbers between 1 and 39: Ok | |
| All numbers unique: Ok | |
| Random numbers: Ok | |