作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
<?xml version="1.0"?>
<Event>
<Country>England</Country>
<City>London</City>
<City>Liverpool</City>
<Code>DWW</Code>
<ID>DG300</ID>
<ID>SS500</ID>
<Division>Europe</Division>
</Event>
假设我有一个像上面这样的 XML。我有一个需要不同数量参数的方法:
myMethod(String... params){}
参数是我想要从 XML 中读取的元素。作为示例,让我们采用 XML 中的 3 个元素
myMethod(Country, City, ID){}
一开始,我计算有多少个参数传递给这个方法:
int count= params.size(); // let say for this example count=3
这里我创建一个以列表作为元素的数组:
List<String>[] tab= new ArrayList[count];
这里我迭代 count 参数等于的次数,并在每个数组元素中放置一个列表:
for(int i=0; i<count; i++){
tab[i] = new ArrayList<>();
}
在我的方法中间,我有一些循环,它们从 XML 读取元素并将它们放入数组(将它们添加到列表中)。我用JAVAX
最后我的数组看起来像这样
tab=[(England),(London,Liverpool),(DG300,SS500)]
现在我遇到了一个问题。我需要每个列表的笛卡尔坐标,这意味着我需要行:
England London DG300
England London SS500
England Liverpool DG300
England Liverpool SS500
我可以用这样的嵌套循环来做到这一点
for(int i=0; i< tab[0].size();i++){
for(int j=0; i< tab[1].size();j++){
for(int k=0; i< tab[2].size();k++){
System.out.println(tab[0].get(i)+ " " + tab[1].get(j)+" "+tab[2].get(k))
}}}}}
但这不是一个好主意,正如我在开始时提到的,我可以有不同数量的参数,这样我就可以有不同数量的嵌套循环。可以是两个,也可以是十个。
如何使用 RECURSION 替换此嵌套循环?或者也许我可以使用递归之外的其他方法来做到这一点?
最佳答案
假设您已设置列表,以便 tab[0] 是要打印的第一个字符串的列表,tab[1] 是后面的字符串等,您可以按如下方式使用递归:
void print_rec(List<String>[] tab, int depth, String str) {
int maxdepth = tab.length - 1;
for (int i = 0; i < tab[depth].size(); i++) { // number of strings at this depth
if (depth == maxdepth) {
System.out.println(str + tab[depth].get(i)); // print line
// no more lists to go through, print the line
} else {
print_rec(tab, depth + 1, str + tab[depth].get(i) + " ");
// add next entry at this level to str and recurse
}
}
// done with this depth, go back up one
}
void printAll(List<Strings>[] tab) {
print_rec(tab, 0, "");
}
这涵盖了所有条目,就像嵌套循环一样。
关于java - 使用递归或任何其他解决方案替换嵌套的 FOR 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45492775/
我是一名优秀的程序员,十分优秀!