Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在数组中循环并检查重复项?_Java_Arrays_Loops - Fatal编程技术网

Java 如何在数组中循环并检查重复项?

Java 如何在数组中循环并检查重复项?,java,arrays,loops,Java,Arrays,Loops,我正在创建一个程序,允许您在一个数组中存储10个项目。我无法让程序执行的是,如果数组中已存在一个输入项,则会给出一个错误 while (no input or duplicated){ ask for a new string if (not duplicated) { store the string in the array break; } } 因此,例如,如果数组看起来像[banana,potato,3,4,yes,

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

while (no input or duplicated){
     ask for a new string
     if (not duplicated) {
          store the string in the array
          break;
     }
}
因此,例如,如果数组看起来像[banana,potato,3,4,yes,…],我再次输入banana,它应该说“Item has has has storage”,并要求我重新输入值。我目前拥有的代码是:

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++;
publicstaticvoidmain(字符串[]args){
扫描仪键盘=新扫描仪(System.in);
int stringNumber=0;
String[]stringArray=新字符串[10];

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

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

当它线性搜索时,性能将为O(n)。

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

  • 遍历整个数组并检查字符串是否在其中(可以使用
    equals()
    检查字符串的内容)
  • 返回一个布尔值,无论字符串是否在数组中
  • 然后添加一个while结构来重新请求输入
  • 基本上它可以是这样的:

    String input = "";    
    do {
        input = keyboard.next();
    }while(!checkString(input))
    
    checkString
    方法将遍历所有数组(使用for循环添加元素),并返回相应的
    布尔值



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

    对我来说,最好的解决方案是使用helperhashset来检查项目是否存在


    另请看。

    当您不想存储重复项时,最好使用。然后使用方法检查元素是否已经存在。如果排序很重要,则使用


    如果确实要使用数组,可以为数组编写实用程序方法
    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.
    }
    
    • 要在数组上迭代,请选中
    • 要比较字符串,请使用方法

      • 为了避免这种情况,您应该使用数组而不是数组和循环,直到size=10


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

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

        while (no input or duplicated){
             ask for a new string
             if (not duplicated) {
                  store the string in the array
                  break;
             }
        }
        
        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++;
            }
        
        for(int i=0;i 0){
        对于(int j=0;j
        我不理解这个问题。到底是什么阻止你检查数组并检查重复项?缺少一些代码将它们添加到集合中,如果集合已经存在,它将不允许你这样做。最后转换为数组(你真的需要一个数组吗?)不要编写自己的
        printary
        -方法。使用
        System.out.println(Arrays.toString(stringArray));
        lngo,问题是我不知道如何循环数组,看看输入字符串值是否已经存在。(我是初学者)这正是我想我应该做的。问题是我已经使用Java两天了,我不知道如何编写这段代码:(我只使用了循环和数组,假设这是学校作业,你不能使用其他数据类型。这段代码中有一个小错误,但我正在修复它!谢谢Matt,这让我对这个程序应该采取的方向有了更好的看法。:)