Java 十进制数二进制表示法中的零计数

Java 十进制数二进制表示法中的零计数,java,for-loop,Java,For Loop,这是我的代码:*已编辑 private static long zeros(long y){ int count= 0; for(long i= y; i<=0; i/=2){ if((i%2)==0) { count+=1; } return count; } 专用静态长零(长y){ 整数计数=0; 对于(长i=y;i你的循环 for(long i= y; i>=y; i/=2) 将在正ys的第一次迭代后完成

这是我的代码:*已编辑

private static long zeros(long y){
    int count= 0;

    for(long i= y; i<=0; i/=2){
        if((i%2)==0) {
        count+=1;
   }
    return count;
  } 
专用静态长零(长y){
整数计数=0;
对于(长i=y;i你的循环

for(long i= y; i>=y; i/=2)
将在正
y
s的第一次迭代后完成,除非
y
为零,在这种情况下,循环是无限的

您应该对程序进行若干修改:

  • 进入循环前,确保
    y
    不是负值
  • 添加一个特殊情况,当
    y
    为零时产生1的计数
  • i
    达到零时,使循环停止

为什么不使用:

long l = 853;//You Long value

//Convert Long to Binary then count the number of 0
StringUtils.countMatches(Long.toBinaryString(l), "0");
示例:

System.out.println("toBinaryString = " + Long.toBinaryString(l));
System.out.println("Nbr = " + StringUtils.countMatches(Long.toBinaryString(l), "0"));
这将打印:

toBinaryString = 1101010101
Nbr = 4

调试它。使用较小的值逐步执行,如
y=4
。打印出
i
count
等值,以查看它们是否包含您期望的内容。当i大于或等于y时,您正在循环。但是第一次迭代将i除以2。因此i小于y,循环停止。您更改了问题,但没有说明这一点在你的问题中,突然使现有的问题和答案与你的问题不一致。不要这样做-如果你做了使现有答案无效的更改,一定要解释清楚。现在for循环的第二项是
i=y
。新情况更糟,因为现在它甚至无法通过第一次迭代,除非你e处理负数。你应该检查
i!=0
。在for循环中i=y;这意味着我接受y的值,直到for循环的第二项必须为真,直到循环运行为止。循环在第二个表达式为真时运行,直到它为真时才运行。我无意中键入了它,在post中编辑了代码,但它不会停止rk当我调试它时,它似乎甚至不会进入循环中,只使用一个for循环