gpt4 book ai didi

java - 使用递归或任何其他解决方案替换嵌套的 FOR 循环

转载 作者:行者123 更新时间:2023-12-01 20:17:27 35 4
gpt4 key购买 nike

<?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/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com