防止数组中的重复值

时间:2013-08-28 13:25:55

标签: java arrays

如果PID中的值已存在于阵列中,我该如何要求用户重新输入?

ex:他进入A然后B再次输入A,然后他从最后输入的A将不被接受,因为它已经存在。

int[] Process = {};
int NumberofProcess = 0; 

String[] PID = new String[10]; //Proces ID


System.out.print("Enter a number of Process from 1 to 10 : ");
    while(bError){
        if(scan.hasNextInt()){
            NumberofProcess = scan.nextInt();
        }else{  
            scan.next();
            continue;
        }
            bError = false;

    }
//----------------  Ask for the user to input for the Process id AT and EX ------- 
for(int i=0;NumberofProcess > i;i++){

    System.out.print("Please Enter a ProcessID " + (i + 1) + " : ");
        PID[i] = scan.next(); 

}

3 个答案:

答案 0 :(得分:2)

我不会使用数组而是使用LinkedHashSet(假设您要保留输入顺序)。然后使用set的contains(...)方法检查或尝试使用add(...)添加PID并检查返回值(如果尚未添加,则为false,即它是否已存在于集合中)。

答案 1 :(得分:1)

如果您可以改为使用Set,请按照托马斯的建议进行操作,如果值的顺序不重要则使用普通HashSet,否则使用LinkedHashSet

如果必须使用数组,请使用`Arrays.binarySearch'检查数组是否已包含字符串:

String pid = scan.next(); 
if (Arrays.binarySearch(PID, pid) < 0) {
    PID[i] = pid;
}

注意:当然您需要导入java.util.Arrays

答案 2 :(得分:0)

您需要创建一个结构,如果您存储用户已经放入系统的PID。

然后,您应该针对该存储中的项目验证每个新输入。如果发现碰撞,您只需通知用户并重复此过程,直到他输入有效数据或选择退出。

在Java中,您可以使用称为集合的专用数据结构,这将加快查找过程。简单ArrayList狂野足以满足您的需求。

申报

Collection<String> storage = new ArrayList<>();

使用

boolean wasStored = storage.contains(input);