2016-11-01 36 views
1
/** 
* 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); 
    } 
} 

這個二進制計數器從代碼調用修道院數位 正如你可能知道,計算機內的所有值以二進制表示的一個問題。在這個簡單的任務中,您需要編寫一個程序來計算給定值中的非零位數。for循環

我們使用的是32位整數值,所以應該有0到32個非零位。 http://www.codeabbey.com/index/task_view/bit-count 你能幫我理解爲什麼我的循環只增加一次而不增加整個事物嗎?

+0

'nums.length'是'1',因爲有數組中的一件事。我想你需要'binary.length()'。 –

+0

['Integer.bitCount(a)'](https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html#bitCount-int-)可能會很有趣。 –

回答

2

你這樣做:

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