我试图用Java编写一个方法来搜索数组中的项并输出索引。但是,我希望它可以处理不同维度的数组。由于必须将输入类型声明为例如String [] [],因此无法将String []作为参数传递。
我要实现的示例:
int[][] my_array1 = {{1, 2}, {3, 4}};
int[] my_array2 = {5,6};
int item1 = 2;
int item2 = 5;
search_item(my_array1, item1);
search_item(my_array2, item2);
输出:
"Index of item1:" [0][1]
"Index of item2:" [0]
我不知道该怎么做。我尝试使用到目前为止还无法使用的通用数组。
谢谢。
答案 0 :(得分:3)
这是递归解决方案的草图:
public List<String> findArrayMatches(Object [] input, String pattern) {
List<String> matchingIndices = new ArrayList<>();
for (int i = 0; i < input.length; i++) {
Object elem = input[i];
if (elem instanceof String) {
String elemString = (String)elem;
// check if elemString matches pattern and add index to matchingIndices if it does
} else if (elem instanceof Object[]) {
Object [] elemArray = (Object[])elem;
//recursive call here
List<String> matchingSublevel = findArrayMatches(elemArray, pattern);
//prepend current index to all items of matchingSublevel and add to matchingIndices
} else {
throw new IllegalArgumentException("input is not an array of strings or arrays");
}
}
return matchingIndices;
}
有关此代码的一些注意事项:
instanceof Object[]
。泛型不是这种情况,如果您尝试将新元素插入input
数组中,则会导致问题。幸运的是你没有。String[]
一起使用,但不能与int[]
一起使用。我会留给您研究如何使其与int[]
一起使用,因为这可能很奇怪,但对基本原理却没有多大作用。答案 1 :(得分:1)
类似的事情应该起作用。这有点令人讨厌,返回一个String,但是我想您明白了。另外,请注意,只会引发第一个巧合。
第一次调用该方法的nRow为0。-> checkPosition(0, valueToCheck);
public String checkPosition(int nRow, int valueToCheck)
{
if(nRow>= array.length)
return "";
List<Integer> rowvalues = Arrays.asList(Arrays.asList(array).get(nRow));
if(rowvalues.contains(valueToCheck))
{
String result = "["+nRow+"]["+rowvalues.indexOf(valueToCheck)+"]";
if (!array.getClass().getComponentType().isArray())
result= result.substring(result.indexOf("["), result.lastIndexOf("["));
return result;
}
return checkPosition(nRow+1, valueToCheck);
}
示例:
(检查0,5)
array: [0,1,0,5,0] | output: [3]
array: [0[0,5,0,0,0],0,0,0,0] | output: [0][1]