Java 为什么不是';t我的代码返回“t”;“最大值”;连续1'的数量;s表示特定输入“s”;524275“吗;?

Java 为什么不是';t我的代码返回“t”;“最大值”;连续1'的数量;s表示特定输入“s”;524275“吗;?,java,binary,Java,Binary,我正在努力解决这个问题 简而言之,任务是在十进制数的二进制表示中找到连续1的最大数目。在我的代码中,我尝试使用两个变量:count和hold计数就会增加1。每当第i个位置为0时,count的值被分配给变量hold。在接下来的迭代中,如果count的值超过hold的值,则count的值被分配给hold。这样,连续1的最大数量存储在hold中。最后,我将打印hold的值 import java.util.*; public class Solution { public static vo

我正在努力解决这个问题

简而言之,任务是在十进制数的二进制表示中找到连续1的最大数目。在我的代码中,我尝试使用两个变量:
count
hold
<只要字符串的当前位置和上一个位置都为1,代码>计数就会增加1。每当第i个位置为0时,
count
的值被分配给变量
hold
。在接下来的迭代中,如果
count
的值超过
hold
的值,则
count
的值被分配给
hold
。这样,连续1的最大数量存储在
hold
中。最后,我将打印
hold
的值

import java.util.*;
public class Solution {

    public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    System.out.println("Enter decimal number");
    int n = in.nextInt();
    String binary = Integer.toString(n,2);
    int count=1;
    int hold=0;
    if(binary.equals("0"))
        System.out.println(0);
    else
    {
    for(int i=0;i<binary.length();i++)
    {
        if(i==0){}
        else if(binary.charAt(i-1)=='1' && binary.charAt(i)=='1')
        {
            count++;
        }
        if(count>hold)
           hold=count;
        if(binary.charAt(i)=='0')
        {
            hold=count;
            count=1;
        }

    }
    System.out.println(hold);
    }
  }
}
import java.util.*;
公共类解决方案{
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(系统输入);
System.out.println(“输入十进制数”);
int n=in.nextInt();
字符串二进制=整数.toString(n,2);
整数计数=1;
int hold=0;
if(二进制等于(“0”))
系统输出打印项次(0);
其他的
{
for(int i=0;ihold)
保持=计数;
if(二进制字符(i)='0')
{
保持=计数;
计数=1;
}
}
系统输出打印项次(保持);
}
}
}

我的代码不适用于将二进制格式转换为“1111111110011”的示例输入“524275”。输出结果是2,这很奇怪。我的代码是这样编写的,即返回连续1的“最大”个数。我哪里出错了?我试着在脑子里干运行代码,但还没发现错误

处理for循环中的第一个
15
后,
hold
将实际具有值
15
。然后满足第一个零,
if(binary.charAt(i)='0'){hold=count;count=1;}
将把
count
重置为
1
。但随后您立即找到另一个零,并且相同的代码
if(binary.charAt(i)='0'){hold=count;count=1;}
1
存储在
hold
中,这样您就丢失了信息
15

一个简单的解决方案就是删除行
hold=count在这行中。您已经在上面三行设置了
hold
。(这是正确的,因为只有当
count
大于上一个最佳值时,才执行此操作


这个方法相当复杂。如果你想要一个更简单的方法。代码应该是非常自解释的

int current_consecutive_ones = 0;
int best_consecutive_ones = 0;
for(int i = 0; i < binary.length(); i++)
{
    if (binary.charAt(i) == '1')
        current_consecutive_ones++;
    else
        current_consecutive_ones = 0;

    if (current_consecutive_ones > best_consecutive_ones)
        best_consecutive_ones = current_consecutive_ones;
}
System.out.println(best_consecutive_ones);
int当前\连续\个=0;
int-best_-continued_-one=0;
对于(int i=0;i最佳连续的)
最佳连续数=当前连续数;
}
System.out.println(最佳连续打印);

在处理for循环中的第一个
15
之后,
hold
将实际具有值
15
。然后满足第一个零,并且
if(binary.charAt(i)='0'){hold=count;count=1;}
会将
count
重置为
1
。但随后您会立即找到另一个零,如果(binary.charAt(i)='0'){hold=count;count=1;}
1
存储在
hold
中,则会丢失信息
15

一个简单的解决方案就是删除这一行中的
hold=count;
。您已经在上面设置了
hold
三行。(而且正确,因为您只在
count
大于之前的最佳值时才这样做。)


这个方法相当复杂。如果你想要一个更简单的方法。代码应该是非常自解释的

int current_consecutive_ones = 0;
int best_consecutive_ones = 0;
for(int i = 0; i < binary.length(); i++)
{
    if (binary.charAt(i) == '1')
        current_consecutive_ones++;
    else
        current_consecutive_ones = 0;

    if (current_consecutive_ones > best_consecutive_ones)
        best_consecutive_ones = current_consecutive_ones;
}
System.out.println(best_consecutive_ones);
int当前\连续\个=0;
int-best_-continued_-one=0;
对于(int i=0;i最佳连续的)
最佳连续数=当前连续数;
}
System.out.println(最佳连续打印);

if
语句和循环中总是建议使用大括号(
{}
),太棒了!谢谢。我现在明白了。:)在
if
语句和循环中总是建议使用大括号(
{}
)。