Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.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 - Fatal编程技术网

Java 如果父数组的元素与子数组的元素相同,如何从父数组中搜索子数组的元素?

Java 如果父数组的元素与子数组的元素相同,如何从父数组中搜索子数组的元素?,java,Java,我是java新手。我有一个问题,我有两个数组parentArray和subArray: parentArray有值,{1,4,4,3,6} 子数组具有值{4,4,3} 因此,第二个数组或所谓的子数组值包含在第一个数组中,即所谓的父数组,索引从[1,2,3]开始。我的问题是,我们如何返回子数组的第一个元素的索引值,它也是父数组的一部分 i、 e 由于子数组的值位于父数组中,从[1]开始索引,我希望我的程序返回1 我尝试比较两个数组并从两个数组返回公共元素。但是在这之前,我无法思考任何逻辑,因为

我是java新手。我有一个问题,我有两个数组
parentArray
subArray

  • parentArray
    有值,
    {1,4,4,3,6}
  • 子数组
    具有值
    {4,4,3}
因此,第二个数组或所谓的
子数组
值包含在第一个数组中,即所谓的
父数组
,索引从
[1,2,3]
开始。我的问题是,我们如何返回
子数组
的第一个元素的索引值,它也是
父数组
的一部分

i、 e

由于子数组的值位于父数组中,从
[1]
开始索引,我希望我的程序返回
1


我尝试比较两个数组并从两个数组返回公共元素。但是在这之前,我无法思考任何逻辑,因为我是一个初学者。

您可以使用
集合。indexofpublist()
如下:

List<Integer> parentArray = Arrays.asList(1,4,4,3,6);
List<Integer> subArray = Arrays.asList(4,4,3);

int index = Collections.indexOfSubList(parentArray , subArray);
// index is 1

我已经为此创建了一个方法。试试下面的代码

public int checkSubArray(int[] parentArray, int[] subArray) {
    int result = -1;
    for (int i = 0; i < parentArray.length; i++) {
        int[] temp = Arrays.copyOfRange(parentArray, i, (subArray.length + i)); //This will create a temporary sub array
        if (Arrays.equals(temp, subArray)) {
            System.out.println(i);
            result = i;
        }
    }
    return result;
}
public int checkSubArray(int[]parentArray,int[]subArray){
int结果=-1;
for(int i=0;i
改进的答案

public int checkSubArray(int[] parentArray, int[] subArray) {
    int result = -1;
    for (int i = 0; i < parentArray.length; i++) {
        if (parentArray[i] == subArray[0]) { // Checking if the first value matches
            int[] temp = Arrays.copyOfRange(parentArray, i, (subArray.length + i)); // This will create a temporary sub array
            if (Arrays.equals(temp, subArray)) {
                System.out.println(i);
                result = i;
            }
        }
    }
    return result;
}
public int checkSubArray(int[]parentArray,int[]subArray){
int结果=-1;
for(int i=0;i
如果数组只包含小于10的整数,也可以尝试类似的方法

public static void main(String[] args) {

    int[] parentArray = new int[]{1, 4, 4, 3, 6};
    int[] subArray = new int[]{4, 4, 3};

    String s1 = convertToString(parentArray);

    String s2 = convertToString(subArray);

    System.out.print(s1.indexOf(s2));
}

private static String convertToString(int[] array) {

    StringBuilder stringBuilder = new StringBuilder();

    for(int num : array){
        stringBuilder.append(num);
    }
    return stringBuilder.toString();
}

我可以用数组实现这个吗?不是名单上的吗?因为我的程序有两个方法,一个是主方法,另一个是逻辑方法,第二个方法的参数是int parentArray[]和subArray[]。实际上,我只从StackOverflow和GitHub看到了这段代码,但它一直返回0。谢谢当返回0时,这意味着您的匹配子列表从索引0开始抱歉,我的书写错误。控制台返回时说
进程已完成,退出代码为0
,但仍然没有得到输出。嗯,有趣的是,我尝试了它,它工作正常,当然我没有添加System.out.println(index);直到现在,您可能还没有注意到这将生成许多不必要的数组,至少检查第一个值是否匹配,然后生成一个子集。谢谢@AxelH。我改进了我的答案。是的,它工作得很好,但快速问一个问题:如果第一个数组没有第二个数组的所有元素,该怎么办。然后它应该返回-1。虽然我们在
int result
中存储了-1,但仍然没有输出。@VivekDharek当没有匹配项时,需要返回什么值?只需检查主方法结果是否等于-1。例如:
if(result!=-1)
BTW,您可以停在
i,现在,尝试使用大于9的值;)这可以适用于使用
字符串
类似于使用
数组。toString
而不是串联,然后当您有匹配的索引时,您可以计算
的数量,但这将是一个极端的解决方案…这不是一个解决方案。检查。您将得到
6
的结果,该结果应返回
1
…哦!是的,我没想到。您能解释一下它返回
6
的原因吗?尽管第二个数组是从
1开始的
public int checkSubArray(int[] parentArray, int[] subArray) {
    int result = -1;
    for (int i = 0; i < parentArray.length; i++) {
        int[] temp = Arrays.copyOfRange(parentArray, i, (subArray.length + i)); //This will create a temporary sub array
        if (Arrays.equals(temp, subArray)) {
            System.out.println(i);
            result = i;
        }
    }
    return result;
}
public int checkSubArray(int[] parentArray, int[] subArray) {
    int result = -1;
    for (int i = 0; i < parentArray.length; i++) {
        if (parentArray[i] == subArray[0]) { // Checking if the first value matches
            int[] temp = Arrays.copyOfRange(parentArray, i, (subArray.length + i)); // This will create a temporary sub array
            if (Arrays.equals(temp, subArray)) {
                System.out.println(i);
                result = i;
            }
        }
    }
    return result;
}
public static void main(String[] args) {

    int[] parentArray = new int[]{1, 4, 4, 3, 6};
    int[] subArray = new int[]{4, 4, 3};

    String s1 = convertToString(parentArray);

    String s2 = convertToString(subArray);

    System.out.print(s1.indexOf(s2));
}

private static String convertToString(int[] array) {

    StringBuilder stringBuilder = new StringBuilder();

    for(int num : array){
        stringBuilder.append(num);
    }
    return stringBuilder.toString();
}