1

countBinaryJava の練習のために、整数nをパラメーターとして受け入れ、数字を持つすべての 2 進数をn昇順で出力し、各値を別の行に出力する方法に取り組み始めました。n が負ではなく 0 より大きいと仮定すると、出力例は次のようになります

私はこれでほとんどどこにも行きません。a と類似のもののすべての可能な文字の組み合わせを見つけるプログラムを作成することはできますが、String2 進数と整数を使用してこの特定の問題をほとんど解決することはできませんでした。

どうやらこの問題に対処する最善の方法は、元のメソッドとは異なるパラメーターを受け入れるヘルパー メソッドを定義し、一連の文字を最終的な出力用の文字列として構築することです。

重要な注意: この演習では、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;
    }
}

コードを実行すると、出力は次のようになります

私のメソッドが期待どおりに実行されない理由を誰かに説明してもらえますか?また、可能であれば、正しい出力が得られるように問題の解決策を教えてもらえますか? ありがとうございました!

4

1 に答える 1

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);
  }
}

より効率的な方法で解決できるようにします。

于 2015-08-09T04:28:10.047 に答える