我正在HackerRank.com上解决代码挑战(从十进制转换为二进制数,然后在二进制文件中打印连续的#s 1),我在下面编写了以下代码来解决这个挑战(见下文)。
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
String binaryNum = "";
int count = 0, maxCount = 0;
StringBuilder binary = new StringBuilder();
while(n != 0){
binaryNum = Integer.toString(n % 2);
binary.append(binaryNum);
n /= 2;
}
binary = binary.reverse();
System.out.println(binary);
for(int i = 0; i < binary.length(); i++){
if(binary.charAt(i) == '1'){
count++;
System.out.print("" + count);
} if(count > maxCount) {
maxCount = count;
}
else {
count = 0;
}
}
System.out.print(maxCount);
}
使用上面的代码,当n = 439(110110111)时,count变量不会递增。它会打印1211111而不是。结果,maxCount为2而不是3.但是,当我使用下面的代码时,当n = 439(120120123)时,count变量按预期递增。结果,maxCount等于3.
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
String binaryNum = "";
int count = 0, maxCount = 0;
StringBuilder binary = new StringBuilder();
while(n != 0){
binaryNum = Integer.toString(n % 2);
binary.append(binaryNum);
n /= 2;
}
binary = binary.reverse();
System.out.println(binary);
for(int i = 0; i < binary.length(); i++){
count = (binary.charAt(i) == '1') ? count + 1 : 0;
System.out.print("" + count);
if(count > maxCount) {
maxCount = count;
}
}
System.out.print(maxCount);
}
我想理解为什么当我使用第一个代码选项和第二个代码选项时,count的输出是不同的。谢谢您的帮助。
答案 0 :(得分:0)
关闭}使代码奇怪地运行。
你对第一个例子的意图可能如下。我刚刚移动了},所以else会附加到你想到的if {}块。
if(binary.charAt(i) == '1'){
count++;
System.out.print("" + count);
if(count > maxCount) {
maxCount = count;
}
} else {
count = 0;
}