对于Java实践,我开始研究一个方法countBinary
,它接受一个整数n
作为参数,打印所有具有n
位数的二进制数字,按升序排列,打印每个值一条单独的线。假设n为非负且大于0,则某些示例输出看起来像this。
我对此几乎没有任何意义。我能够编写一个程序来查找String
和类似事物的所有可能的字母组合,但是我无法使用二进制和整数来解决这个特定问题。
显然,解决此问题的最佳方法是定义一个辅助方法,该方法接受与原始方法不同的参数,并将一组字符构建为String以进行最终打印。
重要提示:本次练习中我根本不应该使用for循环。
编辑 - 重要提示:我需要尾随0,以便所有输出的长度相同。
到目前为止,这就是我所拥有的:
public void countBinary(int n)
{
String s = "01";
countBinary(s, "", n);
}
private static void countBinary(String s, String chosen, int length)
{
if (s.length() == 0)
{
System.out.println(chosen);
}
else
{
char c = s.charAt(0);
s = s.substring(1);
chosen += c;
countBinary(s, chosen, length);
if (chosen.length() == length)
{
chosen = chosen.substring(0, chosen.length() - 1);
}
countBinary(s, chosen, length);
s = c + s;
}
}
当我运行我的代码时,我的输出看起来像this。
任何人都可以向我解释为什么我的方法没有以我期望的方式运行,并且如果可能的话,请向我展示我的问题的解决方案,以便我可以得到正确的输出?谢谢!
答案 0 :(得分:2)
有更有效的方法可以做到这一点,但这会给你一个开始:
public class BinaryPrinter {
static void printAllBinary(String s, int n) {
if (n == 0) System.out.println(s);
else {
printAllBinary(s + '0', n - 1);
printAllBinary(s + '1', n - 1);
}
}
public static void main(String [] args) {
printAllBinary("", 4);
}
}
我会让你以更有效的方式解决问题。