gpt4 book ai didi

java - 递归方法适用于带有控制台的java,但不适用于android

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:33:43 26 4
gpt4 key购买 nike

我写了一个递归方法,从字符串中的字符中获取所有可能的字符组合。我还有一个访问它并返回组合列表的方法:

public static void uns(String word, StringBuilder s, List combos)
{
for(char c: word.toCharArray())
{
s.append(c);
if(word.length() != 1)
{
uns(removeChar(word, c),s,combos);
}
else
{
combos.add(s.toString());
}
s.deleteCharAt(s.toString().length()-1);
}

}

public static List getCombinations(String word)
{
List<String> combinations = new ArrayList<String>();
uns(word,new StringBuilder(),combinations);
return combinations;
}

public static String removeChar(String s, char c)
{
int index = s.indexOf(c);
return s.substring(0,index)+s.substring(index+1);
}

在 Java 中测试时,它运行没有任何缺陷。出于某种原因,当我在 Android 中使用它时,列表中填充了正确数量的元素,但每个元素都是相同的。例如,对于单词“here”,它返回一个包含“eerh”的列表。

最佳答案

这是一个非常奇怪的故障(绝对可以重现),您可能想要就此提交错误报告。

但是,这是一个临时的解决方法;而不是使用 .toString(),它似乎以某种方式重用了引用(即使我用它做了 .substring(0)),所以它们都得到了更新;如果您在每次迭代后打印出列表,您就会明白我的意思。

这是我的 hacky/低效解决方案。变化:

combos.add(s.toString());

...到:

combos.add(s + "");

这有效地将字符串正确地克隆到数组中,这样它们就不会被操纵:

02-17 19:33:48.605: I/System.out(6502): [Combos]: [here, heer, hree, hree, here, heer, ehre, eher, erhe, ereh, eehr, eerh, rhee, rhee, rehe, reeh, rehe, reeh, ehre, eher, erhe, ereh, eehr, eerh]

关于java - 递归方法适用于带有控制台的java,但不适用于android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14928499/

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