2016-11-01 5 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); 
    } 
} 

Это проблема из кода Abbey Called Bit Count Как вы, наверное, знаете, все значения внутри компьютера представлены в двоичной системе. В этой простой задаче вы должны написать программу, которая подсчитывает количество ненулевых битов в заданном значении.двоичный счетчик для цикла

Мы используем 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.

Смежные вопросы