Java 用户输入中的数字不重复

Java 用户输入中的数字不重复,java,validation,do-while,Java,Validation,Do While,通过这个彩票程序,我试图确保数字在1-59之间,同一数字不能输入两次,只能输入数字。我唯一需要帮助的代码是关于只能输入数字的部分 public void choose() { System.out.println("\n"); int temp; boolean valid; for (int i = 0; i < 6; i++) { do { valid = tru

通过这个彩票程序,我试图确保数字在1-59之间,同一数字不能输入两次,只能输入数字。我唯一需要帮助的代码是关于只能输入数字的部分


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

公共空间选择(){
System.out.println(“\n”);
内部温度;
布尔有效;
对于(int i=0;i<6;i++){
做{
有效=真;
System.out.print(“输入1到59之间的整数:”);
temp=键盘.nextInt();
如果(温度<1 | |温度>59){
System.out.println(“错误,请输入有效整数!!”;
有效=错误;
}
对于(int j=0;j
按以下步骤操作:

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
        }
    }
}
尝试:

System.out.println(“\n”);
内部温度;
布尔有效;
对于(int i=0;i<6;i++){
做{
有效=真;
System.out.print(“输入1到59之间的整数:”);
而(!keyboard.hasNextInt()){
键盘。下一步();
System.out.println(“错误!请输入一个数字”);
System.out.print(“输入1到59之间的整数:”);
}
temp=键盘.nextInt();
如果(温度<1 | |温度>59){
System.out.println(“错误,请输入有效整数!!”;
有效=错误;
}
对于(int j=0;j

您可以使用方法
keyboard.hasnetint()

检查用户是否输入了int,这可能是最有效的方法,但很复杂

问我你是否需要解释一下

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));
    }
}
公共类测试{
公共静态void main(字符串[]args){
扫描仪=新的扫描仪(System.in);
ArrayList编号=新的ArrayList(6);
字符串s;
做{
System.out.println(“输入一个介于1和59之间的数字”);
s=scanner.nextLine().toString();
}
而(!s.matches(“[0-9]|[1-5][0-9]”)||numbers.contains|numbers.size()<5&&numbers.add(s));
}
}

另外,请告诉我,如果您需要提示输入无效的范围/格式和重复条目,我将想出一种方法来存储输入的数字,您可能需要使用Set()。然后,你可以使用contains()来检查是否已经输入了一个数字,而不是在输入的数字中显式循环。我昨天没有回答吗?看我的答案,有人能把它缩短吗?你想把这6个数字都要回去吗,用在适合这种特殊情况的地方,您应该努力使用
nextLine
而不是
next
nextLine
等。检查
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);
}
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));
    }
}