3

我正在创建一个程序,可让您将 10 个项目存储在一个数组中。如果输入的项目之一已经存在于数组中,我无法让程序做的是给出错误。

因此,例如,如果数组看起来像 [banana, potato, 3, 4, yes, ...] 并且我再次输入香蕉,它应该说“项目已被存储”并要求我重新输入值. 我目前拥有的代码是:

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++;
4

7 回答 7

3

HashSet当您不想存储重复项时,最好使用 a 。然后使用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.
}
于 2013-10-24T11:52:34.573 回答
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++;
    }
于 2013-10-24T12:01:57.323 回答
1

当您获得字符串输入时,您可以创建一个方法:

  1. 遍历整个数组并检查字符串是否在其中(您可以使用equals()检查字符串的内容)
  2. 返回一个布尔值,无论字符串是否在数组中
  3. 然后只需添加一个 while 结构来重新请求输入

基本上它看起来像这样:

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

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


于 2013-10-24T11:51:48.793 回答
0

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

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

性能将是 O(n),因为它是线性搜索的。

于 2013-10-24T11:51:35.200 回答
0

如果不在数组中引入一些顺序并且不使用附加结构(例如 HashSet),您将不得不查看整个数组并将新项与数组中已经存在的每个项进行比较。

对我来说,最好的解决方案是有一个助手 HashSet 来检查项目是否存在。

也看看这个问题

于 2013-10-24T11:51:55.047 回答
0

为避免您应该使用 anSet而不是数组并循环直到 size = 10。

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

于 2013-10-24T11:53:34.577 回答
0
while (no input or duplicated){
     ask for a new string
     if (not duplicated) {
          store the string in the array
          break;
     }
}
于 2013-10-24T11:55:43.267 回答