使用三元运算符和if条件之间的区别

时间:2016-05-30 16:46:57

标签: java

我正在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的输出是不同的。谢谢您的帮助。

1 个答案:

答案 0 :(得分:0)

关闭}使代码奇怪地运行。

你对第一个例子的意图可能如下。我刚刚移动了},所以else会附加到你想到的if {}块。

if(binary.charAt(i) == '1'){
            count++; 
            System.out.print("" + count);
        if(count > maxCount) {
            maxCount = count;
        }
     } else {
         count = 0; 
        }