循环的二进制计数器

时间:2016-11-01 23:37:00

标签: java

/**
 * Created by abdul on 10/31/2016.
 */
import java.util.Arrays;
import java.util.Scanner;
public class BitCount {
    public static void main(String[] args) {
         Scanner in = new Scanner(System.in);
         System.out.println("Enter Cases:");
         int cases = in.nextInt();

    for (int i = 0; i < cases; i++) {
        int a = in.nextInt();
        String binary = Integer.toBinaryString(a);
        String[] nums = {binary};
        int count = 0;
        for (int j = 0; j < nums.length; j++) {
            //System.out.println(Arrays.toString(nums));
            if (nums[j].equals("1"))
                count++;
        }
        System.out.println(count);
    }
}

Code Abbey Called Bit Count是一个问题 您可能知道,计算机内的所有值都以二进制系统表示。在这个简单的任务中,您要编写一个程序来计算给定值中的非零位数。

我们使用32位整数值,因此应该有0到32个非零位。 http://www.codeabbey.com/index/task_view/bit-count 你能不能帮我理解为什么我的循环只增加一次而不是递增整个事物?

1 个答案:

答案 0 :(得分:2)

你这样做:

    int a = in.nextInt();
    String binary = Integer.toBinaryString(a);
    String[] nums = {binary};

让我们假设你输入“4”。会发生什么?

  1. 首先,数字4存储在a中。
  2. 然后字符串“000100”或类似内容存储在字符串binary中。
  3. 然后使用一个元素创建一个数组,该元素等于字符串binary
  4. 你要做的是创建一个字符串的每个数字的数组,但实际上你创建了一个单独的元素数组,它只存储你已经计算过的字符串的另一个副本!试试这个:

        int a = in.nextInt();
        String binary = Integer.toBinaryString(a);
        int count = 0;
        for (int j = 0; j < binary.length(); j++) {
            //System.out.println(Arrays.toString(nums));
            if (binary.charAt(j) == '1')
                count++;
        }
        System.out.println(count);
    

    这将检查数字1的二进制字符串的每个字符。