2017-06-27 12 views
-1

に1秒の最低数でバイナリでカウント。 Javaを使用すると、これはInteger.toBinaryString()を使用すると簡単です。しかし、私は、1の数の順番で出力を生成したいと思います。例えば、カウント0-7:「クラス」(1 1、2 1の、など)内のは、私は0から<em>のn</em>にカウントし、バイナリの値を表現しようとしています1Sの最大数(Java)の

[000, 001, 010, 100, 011, 101, 110, 111] 

注文は私が解決しています問題の文脈でやや無関係です。そう011、101、110は0~7をカウントし、バイナリ文字列を取得した結果である、110、011、101

の代わりに以下であり得る:

[000, 001, 010, 011, 100, 101, 110, 111] 

私はできません私の脳はこれに近づく方法を包んでいるようだ。

+1

申し訳ありません。しかし、あなたは仕事の課題を落とすだけでした。これまでに試したものを含めてください! – GhostCat

+0

@GhostCatあなたはこれが宿題に関する質問だと思いますか?コードを含めるには、デバッグに関する質問のみが必要です。 https://meta.stackexchange.com/a/224104/244864 https://meta.stackexchange.com/a/215220/244864 https://meta.stackoverflow.com/a/259947/2891664ます。https://メタあなたはそれが何か他のものであると思わせる何か@Radiodef .stackoverflow.com/A/2891664分の259950 – Radiodef

+0

? – GhostCat

答えて

4

のためのあなたの検索が1ビットの数を返します(Javaの1.5以降で利用可能)Integer.bitCount(i)は何ですか。

のJava 8を使用すると、配列にあなたの番号を格納することができますし、bitCount昇順で、それを並べ替える:

Integer[] numbers = new Integer[8]; 
    for (int i = 0; i < 8; i++) numbers[i] = i; 
    Arrays.sort(numbers, Comparator.comparingInt(Integer::bitCount)); 
    System.out.println(Arrays.toString(numbers)); 

それとも、Javaの8ストリームを使用する場合:

List<Integer> numbers = IntStream.range(0, 8) 
      .boxed() 
      .sorted(Comparator.comparingInt(Integer::bitCount)) 
      .collect(Collectors.toList()); 
    System.out.println(numbers); 

あなたは、Java 8を使用できない場合Comparatorは少し複雑です:

for (int i = 0; i < 8; i++) numbers[i] = i; 
    Arrays.sort(numbers, new Comparator<Integer>() { 
     @Override 
     public int compare(Integer o1, Integer o2) { 
      return Integer.bitCount(o1)-Integer.bitCount(o2); 
     } 
    }); 
    System.out.println(Arrays.toString(numbers)); 
+0

我々は代わりに使用することができます@Radiodef [ 'BitSet'](https://docs.oracle.com/javase/7/docs/api/java/util/BitSet.html)も、私たちはより多くので、これらの数値を生成することができると思います効率的な方法 – Oswald

+1

@Radiodef:ヒントのためのありがとう。私はJava 1.5〜1.7のための解決策で私の答えを更新しました –

+1

ニース。彼は手作りを落とし、あなたはすべてのコードを落とした。 – GhostCat

0

あなたは出力を注文したいと言うときそれはあなたがそれをソートしたい意味のように、それはそう。これは多くの方法で行うことができますが、最終的にはComparatorを書くことになります。ここで

bitCountを使った例です:

import java.util.*; 
import java.util.stream.*; 
import static java.util.stream.Collectors.*; 
class Example { 
    public static void main(String[] args) { 
     Set<Integer> set = 
      new TreeSet<>(Comparator.comparingInt(Integer::bitCount) 
            .thenComparing(naturalOrder())); 
     IntStream.rangeClosed(0, 7) 
       .forEach(set::add); 
     String s = set.stream() 
         .map(Integer::toBinaryString) 
         .collect(joining(", ", "[", "]")); 
     // [0, 1, 10, 100, 11, 101, 110, 111] 
     System.out.println(s); 
    } 
} 
関連する問題