Java 为什么不是';t我的代码返回“t”;“最大值”;连续1'的数量;s表示特定输入“s”;524275“吗;?
我正在努力解决这个问题 简而言之,任务是在十进制数的二进制表示中找到连续1的最大数目。在我的代码中,我尝试使用两个变量: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
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
语句和循环中总是建议使用大括号({}
)。