Java-如何检查输入的Integer是否唯一

时间:2018-07-16 03:27:25

标签: java

基本上,我的代码从用户那里获取输入,并使用一种方法来检查输入是否唯一。 如果不是唯一的,请要求用户输入其他名称。

我的想法:

import java.util.Scanner;
public class testing {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);


        int[] input = new int[10];

        for (int i = 0; i < 10; i++) {

            while (true) {
                int n = sc.nextInt();
                for (int j = 0; j < input.length; j++) {
                    input[j] = n;
                    checkunique(input);
                    System.out.println("Choose a different one");
                }
                break;
            }
        }

        public static boolean checkunique(int[] Array) {
            for (int i = 0; i < Array.length - 1; i++) {
                for (int j = 1 + 1; j < Array.length; j++) {
                    if (Array[i] == Array[j]) {
                        return true;
                    }
                }
            }
            return false;
        }
    }
}

对不起,从现在开始我无法弄清其余的情况。

5 个答案:

答案 0 :(得分:1)

在将输入的值添加到数组之前,可以检查输入的值是否与数组中的另一个值相同。为此,您可以使您的检查方法采用两个这样的参数:

public static boolean checkunique(int testValue, int[] array) {
    for (int i = 0; i < array.length; i++) {
        if (testValue == array[i]) {
            return false;
        }
    }
    return true;
}

因此,在将值放入数组之前,请先调用checkunique方法,如果该方法返回true,则将该值添加到数组,否则,请要求用户输入另一个值。您可以为main方法执行以下操作:

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int[] input = new int[10];

    for (int i = 0; i < input.length; i++) {
        int n = sc.nextInt();

        boolean loop = true;
        do {
            if (checkunique(n, input)) {
                // If true
                input[i] = n;
                loop = false;
            } else {
                // If false
                System.out.println("Choose a different one.");
                n = sc.nextInt();
            }
        } while (loop);
    }
}

注意: 由于初始数组由零组成,因此输入零将被视为重复项。如果要解决此问题,只需将数组值初始化为选择的默认值即可。

答案 1 :(得分:1)

这是执行此操作的一种方法。 您可以维护一个Set,在其中存储用户输入。java中的Set只允许唯一数据。因此,您要做的就是检查用户是否输入了您的Set中已经存在的数字。

import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

public class SOTest {

    private static Set<Integer> uniqueInput = new HashSet<>();

    public static void main(String[] args) {
        try (Scanner sc = new Scanner(System.in)) {

            while (true) {
                System.out.println("Choose a number:-");
                int n = sc.nextInt();

                if (!uniqueInput.contains(n)) {
                    uniqueInput.add(n);
                    if(uniqueInput.size()==10) break;
                } else {
                    System.out.println("Duplicate input");
                    continue;
                }
            }
        }
        for(Object i:uniqueInput.toArray()) {
            System.out.print(i+" ");
        }
    }
}

答案 2 :(得分:0)

您发布的代码应该没问题。如果用户数量过多,则可能要使用HashMap

答案 3 :(得分:0)

您可以使用Set添加元素并检查其是否唯一。每次将元素添加到Set using add函数中时,如果再次添加相同的元素,它将返回true。这样您就可以通知用户选择其他选项。

答案 4 :(得分:0)

import java.util.*;


class InputChecker {

   public static boolean checkInput(String[] a, String b) {
       boolean isIn = false;
       for(int x = 0; x < a.length - 1; x++) {
           if(x == 1) {
              if(a[1].equals(a[0]))
                   isIn = true;
        }

        if(a[a.length - 1].equals(a[x]))
            isIn = true;
       }
        return isIn;
}

}

public class MainChecker {

   public static void main(String[] args){
        Scanner receive = new Scanner(System.in);
        InputChecker check = new InputChecker();
        ArrayList<String> checkMe = new ArrayList<String>();
        ArrayList<String> validEntry = new ArrayList<String>();
        while(true) {
        System.out.println("Please enter some input, or end to quit: ");
        String userInput = receive.nextLine();
        if(! userInput.equals("end")) {
                checkMe.add(userInput);
                String[] k =  new String[checkMe.size()];
                k = checkMe.toArray(k);
                boolean bool = check.checkInput(k, userInput);
                if(bool) {
                    System.out.println("Please enter another input: ");
                }
                else {
                    System.out.println("Input stored!");
                    validEntry.add(userInput);
                }

        }


        }

    }

}

这是您的输出:

Please enter some input, or end to quit: 
Sim
Input stored!
Please enter some input, or end to quit: 
Yo
Input stored!
Please enter some input, or end to quit: 
Sim
Please enter another input: 
Please enter some input, or end to quit: 
Yo
Please enter another input: 
Please enter some input, or end to quit: 

说明: 在此示例中,我们仅使用可以为您进行检查的方法创建了另一个类。我们将用户输入存储在ArrayList中,然后可以在主程序中将该ArrayList转换为String数组。当我们在主类中调用该方法时,可以将该数组传递给在另一个类中创建的方法,并且可以检查当前输入是否已经在传递给该方法的数组中。我们将在我们创建的方法中使用一个布尔值作为“标志”,如果该“标志”的值为“ true”,则我们知道用户输入已经在数组中。然后,我们在主程序中将该标志用作条件测试,如果它为“ true”,则知道用户输入已经存储。如果用户输入已经在该阵列中,我们将要求用户提供更多输入,并且我们不会将其存储在主存储阵列中。但是,如果用户输入是“唯一的”,我们将确认输入已存储,并将其放入我们的主数组中。这就是程序的要旨,如您所见,将其分解成类和方法在这里很有用。