如何遍历数组并检查重复?

时间:2013-10-24 11:48:42

标签: java arrays loops

我正在创建一个程序,允许您在数组中存储10个项目。我无法让程序执行的操作是,如果数组中已存在其中一个输入项,则会出错。

所以,例如,如果数组看起来像[香蕉,马铃薯,3,4,是的......]并且我再次输入香蕉,它应该说“项目已经存储”并要求我重新输入值。我目前的代码是:

public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);
        int stringNumber = 0;
        String[] stringArray = new String[10];

        for (int i = 0; i <= stringArray.length; i++) {

            out.println("\nEnter a string");
            String input = keyboard.next();
            stringArray[stringNumber] = input;
            out.println("\"" + stringArray[stringNumber] + "\"" + " has been stored.");

            PrintArray(stringArray);
            stringNumber++;

7 个答案:

答案 0 :(得分:3)

当您不想存储重复项时,最好使用HashSet。然后使用HashSet#contains()方法检查元素是否已存在。如果排序很重要,请使用LinkedHashSet


如果您真的想使用数组,可以为数组编写实用程序方法contains()。传递数组,并搜索值。

public static boolean contains(String[] array, String value) {
    // Iterate over the array using for loop
    // For each string, check if it equals to value.
    // Return true, if it is equal, else continue iteration
    // After the iteration ends, directly return false.
}

答案 1 :(得分:3)

您可以使用嵌套循环遍历数组以查看新输入是否存在。在函数中执行此操作会更好。此外,在执行此操作时,您需要确保您不在第一个元素,否则您将获得空指针异常。

for (int i = 0; i <= stringArray.length; i++) {

        boolean isInArray = false;

        System.out.println("\nEnter a string");
        String input = keyboard.next();

        if (i > 0) {

            for (int j = 0; j < stringArray.length; j++) {
                if (stringArray[j].equalsIgnoreCase(input)) {
                    isInArray = true;
                    break;
                }
            }
        }
        if (!isInArray) {
            stringArray[stringNumber] = input;
        } else {
            System.out.println("\"" + stringArray[stringNumber-1] + "\""
                    + " has been stored.");
        }
        PrintArray(stringArray);
        stringNumber++;
    }

答案 2 :(得分:1)

获得String输入后,您可以创建一个方法:

  1. 浏览整个数组并检查字符串是否在其中(您可以使用equals()检查字符串的内容)
  2. 返回字符串在数组中的布尔值,而不是
  3. 然后只需添加一个while结构来重新询问输入
  4. 基本上它看起来像这样:

    String input = "";    
    do {
        input = keyboard.next();
    }while(!checkString(input))
    

    checkString方法将遍历所有数组(使用for循环,就像添加元素一样)并返回相应的boolean值。


答案 3 :(得分:0)

在插入之前,您应该检查数组中的输入值。您可以编写exists之类的方法来接受String[]&amp; String作为输入参数,并在String数组中找到该字符串,如果找到结果,则返回true else false

public boolean exists(String[] strs, String search){
    for(String str : strs){
        if(str.equals(search))
           return true;
    }
    return false;
}

在线性搜索时性能为O(n)。

答案 4 :(得分:0)

如果不在数组中引入某些顺序而不使用HashSet的附加结构,则必须查看整个数组并将新项与数组中已存在的每个项进行比较。

对我来说,最好的解决方案是使用帮助程序HashSet检查项目是否存在。

另请查看this question

答案 5 :(得分:0)

为了避免你应该使用Set而不是数组并循环直到size = 10.

如果您需要保留数组,可以使用.contains()方法检查该项目是否已存在于数组中。

答案 6 :(得分:0)

while (no input or duplicated){
     ask for a new string
     if (not duplicated) {
          store the string in the array
          break;
     }
}