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