Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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_Function - Fatal编程技术网

Java 比较两个数组并检查是否存在重复和缺少的值

Java 比较两个数组并检查是否存在重复和缺少的值,java,arrays,function,Java,Arrays,Function,我有一个字符串数组x,里面有单词:椅子,桌子,沙发 我还有第二个数组y,上面写着:椅子、勺子、桌子、刀、沙发、毛巾 我想检查x中的所有单词是否都被使用,并且x中的单词在y中没有被使用两次,例如:椅子、勺子、桌子、刀、沙发、毛巾、椅子、冰箱在这个例子中椅子被使用了两次 我的方法是使用一个大小为y的for循环,然后遍历每一个其他索引,因为x的值总是按照这个顺序,并创建一个测试用例数组,但我不知道如何检查x的所有项是否都被使用,以及它们是否没有被使用两次 for(int i = 0 ; i <

我有一个字符串数组x,里面有单词:椅子,桌子,沙发

我还有第二个数组y,上面写着:椅子、勺子、桌子、刀、沙发、毛巾

我想检查x中的所有单词是否都被使用,并且x中的单词在y中没有被使用两次,例如:椅子、勺子、桌子、刀、沙发、毛巾、椅子、冰箱在这个例子中椅子被使用了两次

我的方法是使用一个大小为y的for循环,然后遍历每一个其他索引,因为x的值总是按照这个顺序,并创建一个测试用例数组,但我不知道如何检查x的所有项是否都被使用,以及它们是否没有被使用两次

for(int i = 0 ; i < y.length; i+=2){
    test[i] = x[i];
}
for(int i=0;i
您可以使用地图来存储结果。例如:

    Map<String, Integer> counters = new HashMap<>();

    for(int i = 0; i < y.length; i++) {  // Why do you use i+=2?
        String sY = x[i];

        if (counters.contains(sY)) {
            counters.get(sY)++;
        } else {
            counters.put(sY, 1);
        }
    }

    for(Don't know the type... counter, counters) {
        if ( counter.value() > 1)
            throw new IllegalStateException("You used " + counter.key() + " " + counter.value() + " times. Thats too much" ); 
    }
Map counters=newhashmap();
对于(inti=0;i1)
抛出新的IllegalStateException(“您使用了”+counter.key()+“+counter.value()+”次,太多了”);
}

请注意,这段代码永远不会编译,但我希望您能理解。

假设您只需要担心一个单词,而不是整个单词数组。你会怎么解决这个问题?你说“然后通过每一个其他的索引,因为x的值总是按照这个顺序排列的”。如果您已经知道如何将
x
中的值放置在
y
中,那么为什么还要进行比较呢?这两种标准解决方案是1)在比较之前对数组进行排序,2)使用映射(可能是计数种类的映射)跟踪哪些元素已出现和未出现。解决此问题的一个好方法是将
递归
记忆
合并到程序中。它不仅将尽可能优化,而且还将在动态水平上运行。