繁体   English   中英

二进制计数器循环

[英]Binary counter for loop

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

这是来自代码修道院的一个问题,称为位计数。您可能知道,计算机内部的所有值都以二进制表示。 在这个简单的任务中,您将编写一个程序,该程序计算给定值中非零位数。

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

你做这个:

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

假设您输入“ 4”。 怎么了?

  1. 首先,4号被存储在a
  2. 然后,字符串“ 000100”或类似的内容存储在字符串binary
  3. 然后,创建一个包含一个元素的数组,该元素等于字符串binary

您试图做的是创建一个由字符串的每个数字组成的数组,但是实际上您创建了一个单元素数组,该数组简单地存储了您已经计算出的字符串的另一个副本! 尝试以下方法:

    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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM