我正在编写一个程序,通过将*替换为0或1来生成字符串1 * 0 *的所有可能组合。此程序仅提供3个值并且缺少一个值。有人可以帮我解决这段代码中的问题吗?
对于输入1 * 0 *,此解决方案仅提供3个结果:1000,1001,1101。缺失值为1100.谢谢。
public class TestClass{
public static void generateComb (char[] ch, int index) {
if (index == ch.length)
{
System.out.println (ch);
return;
}
if (ch[index]=='*'){
ch[index] = '0';
generateComb (ch, index+1);
ch[index] = '1';
generateComb (ch, index+1);
}
else {
generateComb (ch, index+1);
}
}
public static void main (String[] args) throws Exception {
char[] chtest = {'1', '*', '0', '*'};
generateComb(chtest, 0);
}
}
答案 0 :(得分:0)
这里发生的事情是,当您说ch[index] = '0';
您正在更改该对象时,您并未将该字符设置为 到*
,因此在第二个*
转到1
后,它不再被替换。这称为按引用传递,char[] ch
是对字符串的引用。 See this question举个例子。
这应该有效:
public class TestClass{
public static void generateComb (char[] ch, int index) {
if (index == ch.length)
{
System.out.println (ch);
return;
}
if (ch[index]=='*'){
ch[index] = '0';
generateComb (ch, index+1);
ch[index] = '1';
generateComb (ch, index+1);
ch[index] = '*'; // <-------------- here
}
else {
generateComb (ch, index+1);
}
}
public static void main (String[] args) throws Exception {
char[] chtest = {'1', '*', '0', '*'};
generateComb(chtest, 0);
}
}
&#13;
每一轮中发生的事情的一个例子可能会有所帮助:
使用调试器逐步执行此操作可能有助于进一步显示问题