问题
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);
}
}
回答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]
回答2:
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()
.
回答3:
This May be the ULTIMATE SOLUTION but require plenty of brain power to actually understand how it works.
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
来源:https://stackoverflow.com/questions/60578282/non-duplicate-number-in-user-input