簡體   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